管理Couchbase客户端的DI

时间:2013-04-18 05:59:21

标签: dependency-injection ninject ravendb couchbase

使用RavenDb这真的是小菜一碟:

public class DataAccessModule : NinjectModule {
    public override void Load() {
        Bind<IDocumentStore>().ToMethod(
            context => {
                var documentStore = new EmbeddableDocumentStore {
                    DataDirectory = @"~/App_Data/database",
                    UseEmbeddedHttpServer = true
                };
                return documentStore.Initialize();
            }
       ).InSingletonScope();

        Bind<IDocumentSession>().ToMethod(context =>
            context.Kernel.Get<IDocumentStore>().OpenSession()
        ).InRequestScope();
    }
}

如何管理Couchbase .NET client的依赖注入?

1 个答案:

答案 0 :(得分:2)

根据this page,在“实例化客户”标题下:

  

在实践中,创建客户端的成本很高。客户端在创建连接池并设置线程以获取群集配置时会产生开销。因此,最佳做法是根据AppDomain为每个存储桶创建一个客户端实例。

与RavenDB不同,CouchDB似乎没有“会话”或其他必须根据请求实例化的工作单元容器。

因此,如果您想使用像Ninject这样的DI容器,您只需将CouchbaseClient类注册为单例,可能使用ICouchbaseClient接口。

Bind<ICouchbaseClient>().ToMethod(
        context => {
            var client = new CouchbaseClient();
            // do anything else you need to init the client here
            return client;
        }
   ).InSingletonScope();