c# - 在 StructureMap 中使用 Registry 创建可插拔架构

标签 c# architecture structuremap ravendb

我有一个 Web 项目,我希望它与 ravendb 和 ravendb-embedded 一起工作。 所以这就是我认为我应该解决的方法。

两个项目,MvcRavendb 和 MvcRavendb-Embedded,这两个项目引用了两个不同的 nuget 包,一个用于 ravendb,一个用于 ravendb embedded。

在我的核心项目中,我有一个接口(interface) IDocumentStoreInitializer,它有一个方法,IDocumentStore InitializeDocumentStore()

MvcRavenDb 和 MvcRavenDb-Embedded 有一个这样的类

public class RegisterRavenDb : IDocumentStoreInitializer {
    public IDocumentStore InitializeDocumentStore() {
        return new DocumentStore OR EmbeddableDocumentStore();
    }
}

然后我有一个类,像这样注册具体实现

public class RavenRegistry : Registry {
    public RavenRegistry() {
        For<IDocumentStoreInitializer>().Use<RegisterRavenDb>();
    }
}

到目前为止一切顺利,但后来我有了像这样配置结构图的 Bootstrap

public class Bootstrapper {
    public static IContainer Initialize() {
       ObjectFactory.Initialize(x =>
       {
          // here I want to use the registered concrete implmentaiton of IDocumentStore
          var documentStore = new DocumentStore { ConnectionStringName = "RavenDB" };

          documentStore.Initialize();
       }
    }
 }

那么我如何告诉 structuremap 使用 RavenRegistry 类中的 InitializeDocumentStore? 也许我错过了什么或者我在这里采取了错误的方法

最佳答案

只需使用 EmbeddableDocumentStore 实例,使用连接字符串,您就可以控制将要嵌入的任何内容或服务器/客户端。

关于c# - 在 StructureMap 中使用 Registry 创建可插拔架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430106/

相关文章:

c# - 自动将 Interface<T> 解析为 StructureMap 中的 Implementation<T>(仅泛型类型 T 不同)

c# - 通过改变不同的构造函数类型来选择特定类型的结构图配置

rest - 聚合和事务的 DDD 问题

azure - 全局递增计数器有哪些选项?

.net - MoqAutoMocker 和原始构造函数参数

c# - LINQ - 将列表转换为值为列表的字典

c# - 如何在 asp.net core 中使用 orchard .po 文件本地化来本地化数据注释属性?

c# - Compact Framework 中是否有 StructLayout "Pack"属性的替代方案?

C# 以编程方式取消 Windows 关机

architecture - 协调 DDD、 View 模型和性能