【发布时间】:2016-11-29 12:19:19
【问题描述】:
是否可以将依赖项注入到Entity Framework 6的Configuration类中?
例如,像这样:
internal sealed class Configuration : DbMigrationsConfiguration<MyBaseContext>
{
private readonly ILogger _logger;
public Configuration(ILogger logger)
{
this._logger = logger;
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Home.DAL.Data.HomeBaseContext context)
{
//log something
}
}
或者更一般的方法是获得在迁移内部注入代码的可能性:
public partial class InitialMigration : DbMigration
{
private readonly ILogger _logger;
public InitialMigration(ILogger logger)
{
this._logger = logger;
}
public override void Up()
{
CreateTable(...);
}
public override void Down()
{
DropTable(...);
}
}
实体框架 6 中的 DI 初始化在哪里定义这些绑定?
更新
我不是在问我应该使用什么。目前,我正在使用 Ninject,但这是不可能的,因为无论我使用什么,我都应该能够将依赖项注入到迁移的构造函数中。当然,如果你写了我在上面的例子中写的东西,它只会给你抛出关于“没有默认构造函数”的异常。
上面示例中的 ILogger 只是一个简单的依赖示例。如果您有 IGeneratorService 会生成一些数据,并且您想使用此服务为 Seed 方法生成数据,情况会变得更糟。
【问题讨论】:
-
DI 初始化应该由您的 DI 框架处理。
-
这个问题的任何部分的答案如何?
-
您是否尝试过使用任何 DI 框架?
-
实体框架不使用任何 DI 容器。这两种类型(DbMigrationsConfiguration、DbMigration)都是使用反射创建的,因此您不能使用构造函数注入或类似方法来执行此操作。
-
如何运行这些迁移?使用
Update-Database?
标签: c# entity-framework