有谁知道为什么C#似乎不喜欢下面的代码?
问题是MyContext
由于其类型不匹配而无法分配到_context
变量,但MyContext
从DbContext
派生(继承?),因此肯定会满足generics where子句吗?
public class UnitOfWork<TContext> : IUnitOfWork<TContext> where TContext : DbContext
{
private TContext _context;
public UnitOfWork()
{
_context = new MyContext(Common.ConfigurationProvider.DatabaseConnectionString);
}
...
}
答案 0 :(得分:2)
这是不允许的,因为where TContext : DbContext
约束承诺TContext
将是DbContext
而不是MyContext
。
换句话说,TContext
可能是MyContext2
,与MyContext
没有继承关系。所以编译器不满意:(
如果您打算使用特定的上下文MyContext
,那么IMO您不需要泛型。
<小时/> 编辑:如果您确定您的上下文将是类型参数(TContext)的后代,那么您可以发挥一个技巧使其工作,
public UnitOfWork()
{
_context = (TContext)(object)new MyContext(...);
}
但是,在生产代码中使用它之前我会三思而后行。如果MyContext
不是TContext
或其后代,则会失败。
答案 1 :(得分:0)
TContext
可能是继承自DbContext
的{{1}}与MyContext
类型不兼容的另一种类型。