我正在使用DbContextScope。我试图实现这个通用接口:
namespace EntityFramework.DbContextScope.Interfaces {
public interface IDbContextFactory {
TDbContext CreateDbContext<TDbContext>() where TDbContext : class, IDbContext;
}
}
目标是将我的实现提供给以下功能:
namespace EntityFramework.DbContextScope {
public class DbContextScope : IDbContextScope, IDisposable {
public DbContextScope(IDbContextFactory dbContextFactory);
}
}
我似乎无法弄清楚如何实现此接口并正确地将其提供给DbContextScope。我尝试了一个通用的实现:
public class MyDbContextContextFactoryGeneric : IDbContextFactory {
TDbContext IDbContextFactory.CreateDbContext<TDbContext>() {
Type type = typeof(TDbContext);
if (type == typeof(MyDbContext)) {
return new MyDbContext();
}
throw new NotImplementedException();
}
}
但我得到的错误是:&#34;无法隐式转换类型&#39; MyDBContext&#39; to&#39; TDbContext&#39;&#34;。
我尝试了一个明确的实现:
public class MyDbContextContextFactory : IDbContextFactory<MyDBContext> {
public MyDBContext Create() {
return new MyDBContext();
}
}
但是当我尝试将它传递给DbContextScope时:
public class Test {
public void PerformTest() {
IDbContextFactory dbContextFactory = new MyDbContextContextFactory();
using (DbContextScope scope = new DbContextScope(dbContextFactory)) {
// Do stuff
}
}
}
我在使用行之前的行上出现错误:&#34;无法隐式转换类型&#39; MyDbContextContextFactory&#39; to&#39; EntityFramework.DbContextScope.Interfaces.IDbContextFactory&#39;。存在显式转换(您是否错过了演员?)&#34;
我做错了什么?
答案 0 :(得分:0)
我终于找到了正确的语法,并且能够使用通用方法解决它。
public class MyDbContextContextFactoryGeneric : IDbContextFactory {
TDbContext IDbContextFactory.CreateDbContext<TDbContext>() {
return typeof(TDbContext) == typeof(MyDbContext)
? new MyDbContext() as TDbContext
: Activator.CreateInstance<TDbContext>();
}
}