[英]How do you implement generic factory interface?
我正在使用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();
}
}
但是我得到的錯誤是:“無法將類型'MyDBContext'隱式轉換為'TDbContext'”。
我嘗試了一個明確的實現:
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
}
}
}
我在使用行之前的行上收到錯誤:“無法將類型'MyDbContextContextFactory'隱式轉換為'EntityFramework.DbContextScope.Interfaces.IDbContextFactory'。存在顯式轉換(您是否缺少類型轉換?)“
我究竟做錯了什么?
我終於找到了正確的語法,並能夠使用通用方法解決它。
public class MyDbContextContextFactoryGeneric : IDbContextFactory {
TDbContext IDbContextFactory.CreateDbContext<TDbContext>() {
return typeof(TDbContext) == typeof(MyDbContext)
? new MyDbContext() as TDbContext
: Activator.CreateInstance<TDbContext>();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.