我有一个网络项目,我希望它能与ravendb和ravendb-embedded一起使用。 所以这就是我认为我应该解决的问题。
两个项目,MvcRavendb和MvcRavendb-Embedded,其中两个项目引用了两个不同的nuget包,一个用于ravendb,另一个用于ravendb嵌入。
在我的核心项目中,我有一个接口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>();
}
}
到目前为止一直很好,但后来我有了像这样配置结构图的引导程序
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? 也许我错过了一些东西或者我在这里采取了错误的方法
答案 0 :(得分:1)
只需使用EmbeddableDocumentStore实例,使用连接字符串,即可控制嵌入的内容或服务器/客户端。
答案 1 :(得分:0)
这应该按照你的意愿行事。在 OnCreation 中,也可以设置ConnectionString。
ObjectFactory.Initialize(x =>
{
// here I want to use the registered concrete implmentaiton of IDocumentStore
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssembliesFromApplicationBaseDirectory();
scan.LookForRegistries();
});
x.For<IDocumentStore>().Use(c =>
c.GetInstance<IDocumentStoreInitializer>().
InitializeDocumentStore()).OnCreation<IDocumentStore>(z => z.Initialize());
});