因此,我開始使用Ninject進行依賴注入,並且我想知道人們如何使用內核作爲工作單元類型對象(如Linq2Sql Datacontexts)的對象工廠。我只是像正常的依賴注入它們,但是這引入了一些我想避免的對象生存期問題。 DataContexts不同於一般的依賴關係,因爲你應該根據需要啓動新的實例,並在完成時處理它們。使用Ninject內核作爲工作單元對象工廠
要做到這樣的事情需要我簡單地設置像這樣的提供者...
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的其他東西nyway。我喜歡它爲團隊中的成員提供了一個工廠的約定,而不是讓他們接受它(在奇怪的地方創建一堆不同的工廠類,或者只是在對象上添加靜態方法等)。
想法?有沒有更好的方法來處理使用依賴注入的DataContexts或WCF Service Clients等工作單元依賴關係?
好得多。在注入依賴和注入工廠之間我的大腦陷入了某處。謝謝。 – 2009-11-17 22:03:18