2013-04-18 146 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