2013-04-18 90 views
0

随着RavenDb这真是小菜一碟:为Couchbase客户端管理DI

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

回答

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(); 
+0

Couchbase客户端没有类似的工作单元是正确的。建议每个应用程序域中的每个存储单元保留一个实例。 – 2013-04-22 21:52:14