【发布时间】:2023-12-24 02:54:01
【问题描述】:
我刚开始学习依赖注入,我被困在这里。
我的项目在实体框架 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>();
}
【问题讨论】:
标签: c# dependency-injection inversion-of-control ninject