我刚刚开始学习依赖注入,我被困在这里。
我的项目在实体框架 DbContext 上有一个 WCF 数据服务。
public class MyDataService : DataService<MyDbContext>
{
protected override MyDbContext CreateDataSource()
{
// I want to use dependency injection for this
return new MyDbContext();
}
}
该类是
a) IIS 托管,所以我没有任何控制 b) 用于集成测试,使用创建var host = new DataServiceHost(type, new Uri[] { });
两者都为 MyDbContext 使用不同的构造函数
所以基本上是用这个注入上下文
protected override MyDbContext CreateDataSource()
{
INinjectModule module = ???; // -
IKernel kernel = new StandardKernel(module);
return kernel.Get<MyDbContext>();
}
所以问题是,在这种情况下,最佳实践是什么?我是不是该:
a) 在主项目和服务使用的类库中创建一个模块 b) 在包含 Ninject 模块的 DataService 项目中创建一个公共静态变量。c) 在包含 Ninject 内核的 DataService 项目中创建一个公共静态变量 d) 其他东西。
我更喜欢类似的东西
protected override MyDbContext CreateDataSource()
{
DefaultKernel.Get<MyDbContext>();
}