測試新的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>();

這很完美......

......直到沒有。在運行應用程序時,一切都很好。但是,當我需要使用“dnx.ef migration add”應用某些模型更改時,我們會收到錯誤“沒有為此對象定義無參數構造函數”。

好的,沒問題。因此,我們添加了一個沒有參數的附加構造函數,我們希望這些構造函數僅供遷移過程使用。但是,DI進程只註冊無參數構造函數,因此永遠不會傳入HttpContext對象。

那麼如何讓MVC的默認DI模型強制使用我的構造函數和參數?並保留無參數構造函數用於遷移?

熱門答案

基本的ASP.NET開箱即用的DI不支持指定在註冊類時調用哪個構造函數(它只解析具有一個公共構造函數的類型)。

你可以使用更高級的DI來實現這一目的 - 即有一個alpha2版本的autofac可用於ASP.NET 5(“Autofac”:“4.0.0.0-alpha2”,“Autofac.Dnx”:“4.0.0-alpha1” )。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因