测试新的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模型强制使用我的构造函数和参数?并保留无参数构造函数以进行迁移?
答案 0 :(得分:0)
基本的ASP.NET开箱即用的DI不支持在注册类时指定要调用的构造函数(它只解析具有一个公共构造函数的类型)。
你可以使用更高级的DI来实现这一目的 - 即有一个alpha2版本的autofac可用于ASP.NET 5(“Autofac”:“4.0.0.0-alpha2”,“Autofac.Dnx”:“4.0.0 -alpha1" )。