我正在尝试为ASP.NET Core(MVC6)应用程序中的DbContext(EF6)声明一个泛型类(Factory)。问题是我需要一个依赖注入的接口类型。
我尝试了多种方法,谷歌(一反常态)似乎没有帮助。这或者意味着我的搜索使用了错误的单词,或者我正在尝试做的是完全错误的。
所以问题是:
如果我在一个项目中有两个DbContexts,并且我想创建一个通用工厂,它可以使用单个方法(称为CreateContext())为这些中的任何一个创建上下文,并使用通用接口,因此我可以使用依赖注入,请问正确的课程定义是什么?
示例界面:
public interface IDbContext<C> where C: DbContext
{
C CreateContext(); //<-- generic bit required here for this method
}
示例工厂:
public class DbContextFactory<C> : IDbContext<C>, where C: DbContext //<--unable to get this correct
{
private C _context = null;
private string _connectionstring;
public DbContextFactory(string connectionString)
{
_connectionString = connectionString;
}
public C CreateContext()
{
try
{
var optionsBuilder = new DbContextOptionsBuilder<C>();
optionsBuilder.UseSqlServer(_connectionString);
//_context = new C(optionsBuilder.Options); //<-- issue here also
_context = default(C); //<-- how to pass options??
}
catch (Exception ex)
{
// log some error here
}
return _context;
}
}
非常感谢有关此主题的任何帮助。 :)
答案 0 :(得分:0)
正如所说,正确的定义是:
接口保持不变......
public class DbContextFactory<C> : IDbContext<C> where C: DbContext
{
...
}
public C CreateContext() ...
这可以按预期工作。