【发布时间】:2019-11-03 06:53:01
【问题描述】:
使用 ninject,我想为依赖于 ApplicationDbContext 的 MyRepository 类创建提供程序:
public class MyRepository<TEntity> : IMyRepository<TEntity>
where TEntity : MyBaseEntity
{
private ApplicationDbContext _dbContext;
public MyRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
// ...
}
我看到this document 解释了应该如何创建提供程序,但我不确定:
- 如何将
ApplicationDbConext参数传递给提供者 - 如何实例化泛型类型
这是我的尝试:
public class MyRepositoryProvider : Provider<MyRepository>
{
protected override MyRepository CreateInstance(IContext context)
{
// how to create a generic instance of type T?
MyRepository myRepository = new MyRepository<T>(/*need ApplicationDbContext*/);
return myRepository;
}
}
我不确定是否可以为泛型类型创建提供程序。如果不, 有人可以展示如何使用Factory interface 做到这一点吗?
注意:我创建了this code review,解释了我为什么需要提供者。
【问题讨论】:
-
1)bindIContext到ApplicationDbContext和2)使用genericbinding时会发生什么,如下所述:stackoverflow.com/a/10243699/2877982 -
@aage:感谢您的评论。
IContext是 ninject 的上下文(如 here 所述)。关于另一个链接,答案不是使用提供者... -
我知道它不是提供者,但为什么它与
binding和resolving的“常规”方式在container中的工作方式有所不同?关于IContext... 可能只是将ApplicationDbContext绑定到自身或factory?
标签: c# dependency-injection ninject provider ninject-extensions