所以我开始使用 Ninject 进行依赖注入,我想知道人们如何看待使用内核作为工作单元类型对象(如 Linq2Sql Datacontexts)的对象工厂。我会像普通依赖项一样注入它们,但这会引入一些我想避免的对象生命周期问题。DataContexts 与一般依赖项不同,因为您应该根据需要启动新实例并在完成后处理它们。
要做这样的事情,我只需像这样设置一个提供程序......
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 服务客户端?