具有MVC6依赖注入的EF7构造函数

时间:2015-05-11 19:44:55

标签: c# entity-framework dependency-injection asp.net-core-mvc entity-framework-core

测试新的MVC6和EF7框架。

我们经常需要在数据库层中使用HttpContext。要在MVC6中执行此操作,我们只需要一个DbContext构造函数,如下所示:

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {                  
        HttpContext _httpContext;                     
        public ApplicationUser CurrentUser { get; set; }                

        public ApplicationDbContext(IHttpContextAccessor httpContextFactory=null)

在我们的Startup.cs中,我们将DI注册为:

services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();

这很有效......

......直到它没有。在运行应用程序时,一切都很好。但是,当我需要使用&#34; dnx应用某些模型更改时。 ef migration add&#34;我们得到一个错误&#34;没有为这个对象定义无参数构造函数。&#34;

好的,没问题。因此,我们添加了一个没有参数的附加构造函数,我们只希望迁移过程使用它们。但是,DI进程只注册无参数构造函数,因此永远不会传入HttpContext对象。

那么如何让MVC的默认DI模型强制使用我的构造函数和参数?并保留无参数构造函数以进行迁移?

1 个答案:

答案 0 :(得分:0)

基本的ASP.NET开箱即用的DI不支持在注册类时指定要调用的构造函数(它只解析具有一个公共构造函数的类型)。

你可以使用更高级的DI来实现这一目的 - 即有一个alpha2版本的autofac可用于ASP.NET 5(“Autofac”:“4.0.0.0-alpha2”,“Autofac.Dnx”:“4.0.0 -alpha1" )。