【发布时间】:2020-03-16 16:46:10
【问题描述】:
考虑我有以下泛型类:
public class Repository<T> : IRepository<T> where T : class
{
private DbContext Context { get; set; }
public Repository(DbContext context)
{
Context = context;
}
}
我使用 SimpleInjector 注册了两个不同的 dbcontext,如下所示:
container.Register<ContextA>(
()=> new ContextA(SqlServerDbContextOptionsExtensions.UseSqlServer(
new DbContextOptionsBuilder(), sqlConnection).Options));
container.Register<ContextB>(
() => new ContextB(SqlServerDbContextOptionsExtensions.UseSqlServer(
new DbContextOptionsBuilder(), sqlConnection).Options));
然后我对 dbContext 进行了以下注册:
container.RegisterConditional(
typeof(DbContext),
typeof(ContextA),
c=> c.Consumer.ImplementationType.GenericTypeArguments
.Any(r => r.Namespace == "NameSpace.ContextA"));
container.RegisterConditional(
typeof(DbContext),
typeof(ContextB),
c => c.Consumer.ImplementationType.GenericTypeArguments
.Any(r => r.Namespace == "NameSpace.ContextB"));
当代码到达 container.RegisterConditional 时,它会抛出错误并抱怨 ContextA 有两个构造函数。
考虑到我已经注入了ContextA 和ContextB,根据其通用参数值为Repository 注入适当的DbContext 的最佳方法是什么?
更新
我想根据传递的类型将DbContext 注入Repository<T>,以初始化Repository<T>。
所以我可能有:
IRepository<Entity1> ...
Entity1 可能在 NameSpace.ContextA 中。
【问题讨论】:
标签: c# entity-framework .net-core simple-injector