MVC6依存性注入を伴うEF7コンストラクタ

asp.net-core-mvc c# dependency-injection entity-framework 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>();

これは完璧に動作します...

...それがない限り。アプリケーションを実行すると、すべてがうまくいきます。しかし、 "dnx。ef migration add"を使っていくつかのモデル変更を適用する必要があるとき、 "このオブジェクトに対して定義されたパラメータなしのコンストラクタはありません"というエラーが表示されます。

OK、問題ありません。そこで、パラメータを持たないコンストラクタを追加します。このコンストラクタは、移行プロセスでのみ使用します。しかし、DIプロセスは、HttpContextオブジェクトが決して渡されないように、パラメータのないコンストラクタを登録します。

では、MVCのデフォルトのDIモデルを使用して、強制的にパラメータを使用してコンストラクタを使用するにはどうすればよいですか?移行のためのパラメータのないコンストラクタを保持しますか?

人気のある回答

クラスが登録されたときに呼び出すコンストラクタを指定することは、基本的なASP.NETのすぐに使用できるDIではサポートされていません(パブリックコンストラクタが1つの型のみを解決します)。

この目的のために、より高度なDIを使用することができます。つまり、ASP.NET 5( "Autofac": "4.0.0.0-alpha2"、 "Autofac.Dnx": "4.0.0-alpha1" )。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ