Jas*_*yon 1 c# dependency-injection ninject
所以我开始使用Ninject进行依赖注入,我想知道人们将内核用作工作单元类型对象(如Linq2Sql Datacontexts)的对象工厂的想法.我会像普通的依赖项一样注入它们,但这会引入一些我想避免的对象生存期问题.DataContexts与一般依赖项不同,因为您应该根据需要启动新实例并在完成后处理它们.
要做这样的事情,我只需设置一个这样的提供者......
class SomeDataContextProvider : Provider<SomeDataContext>
{
private static string _connectionString = "someConnectionString"
protected override SomeDataContext CreateInstance(IContext context)
{
return new SomeDataContext(_connectionString);
}
}
Run Code Online (Sandbox Code Playgroud)
将它们绑定在一个模块中......
class MyModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<SomeDataContext>().ToProvider(SomeDataContextProvider);
}
}
Run Code Online (Sandbox Code Playgroud)
并在需要时使用标准内核......
class MyClassThatNeedsADataContext
{
private StandardKernel _kernel = new StandardKernel(new MyModule());
public void SomeMethod()
{
using (var db = _kernel.Get<SomeDataContext>())
{
//Use the context
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于什么本质上是一个静态工厂来说似乎有点沉重,但无论如何我正在使用Ninject进行其他工作.我喜欢它为团队中的成员提供了一个工厂惯例,而不是让他们躲避它(在奇怪的地方创建一堆不同的工厂类,或者只是在对象上放置静态方法等).
思考?有没有更好的方法来处理使用依赖注入的DataContexts或WCF服务客户端等工作单元依赖项?
我不喜欢将容器注入到类中,因为它在应用程序和容器之间创建了依赖关系,并且不太清楚类具有什么依赖关系.我真的没有看到这种方法如何在工厂中获得任何收益,所以我个人创建了一个'DataContextFactory'并将其注入任何需要访问数据库的类中.
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |