[英]How to inject a single factory instance to multiple repositories and unit of work using ninject?
[英]Using the Ninject kernel as a Unit of Work object factory
因此,我開始使用Ninject進行依賴項注入,並且想知道人們對使用內核作為工作單元類型對象(如Linq2Sql Datacontexts)的對象工廠的想法。 我只是像普通的依賴項一樣注入它們,但這引入了一些我想避免的對象生存期問題。 DataContext與常規依賴項有所不同,因為您應該根據需要啟動新實例,並在完成后將其處置。
為了做這樣的事情,我只需要設置一個像這樣的提供者...
class SomeDataContextProvider : Provider<SomeDataContext>
{
private static string _connectionString = "someConnectionString"
protected override SomeDataContext CreateInstance(IContext context)
{
return new SomeDataContext(_connectionString);
}
}
將它們綁定到模塊中...
class MyModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<SomeDataContext>().ToProvider(SomeDataContextProvider);
}
}
並在需要時使用標准內核...
class MyClassThatNeedsADataContext
{
private StandardKernel _kernel = new StandardKernel(new MyModule());
public void SomeMethod()
{
using (var db = _kernel.Get<SomeDataContext>())
{
//Use the context
}
}
}
對於本質上是靜態工廠的工廠來說似乎有點沉重,但無論如何我還是在使用Ninject進行其他工作。 我喜歡它為團隊中的成員提供了一個工廠約定,而不僅僅是讓他們隨風而動(在怪異的地方創建了一堆不同的工廠類,或者只是在對象上放置靜態方法等)。
有什么想法嗎? 有沒有更好的方法使用依賴項注入來處理工作單元依賴項,例如DataContexts或WCF服務客戶端?
我不喜歡將容器注入類中,因為它在您的應用程序和容器之間創建了一個依賴關系,並使得不清楚類具有什么依賴關系。 我真的看不出這種方法如何在工廠中為您帶來任何收益,因此我個人將創建一個“ DataContextFactory”並將其注入需要訪問數據庫的任何類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.