2016-04-07 10 views
3

dependecy注射用MVC 5にDataProtectionProviderを取得し、私は言うどのDpapiDataProtectionProviderにマイクロソフトdocumenationつまずいています から導出されたデータ保護サービスを提供するために使用しが正しく

データ保護API アプリケーションがASP.NETによってホストされておらず、すべてのプロセスが同じドメインIDの として実行されている場合は、データ保護の最良の選択です。

質問が突然発生します。アプリケーションがASP.NETでホストされているときに最適な選択肢は何ですか?

さらに検索すると、OWINからDataProtectionProviderを取得することをお勧めします。これは、IAppBuilderを持っていて、Microsoft.Owin.Security.DataProtection名前空間にあるAppBuilderExtensionsを使用して、app.GetDataProtectionProvider()と呼ぶスタートアップ構成で実行できます。

これまでのところ、私はかなり満足しています。ただし、クラスのコンストラクタにDataProtectionProviderを挿入する必要があります(例:UserManager)。私はone suggestionを見たところで、静的なプロパティにDataProtectionProviderを格納し、それを必要な場所で使用していますが、それは間違った解決策のようです。

私は以下のコードと同様のソリューションは、(ninjectコンテナを使用して)適切であろうと思う:

kernel.Bind<IDataProtectionProvider>() 
    // beware, method .GetDataProtectionProvider() is fictional 
    .ToMethod(c => HttpContext.Current.GetOwinContext().GetDataProtectionProvider()) 
    .InRequestScope(); 

答えて

1

方法AutofacでDataProtectionProviderを登録する方法を説明しますwalkthroughがあります。

builder.Register<IDataProtectionProvider>(c => app.GetDataProtectionProvider()).InstancePerRequest(); 
+0

私がこれを正しく理解している場合、DIコンテナはスタートアップクラスで初期化する必要があります。 – Santhos

+0

はい、またはコンポジションルートの一部である限り、 'Startup'クラスによって呼び出されるクラスです。他の人がNinjectをOWINでセットアップする方法について質問しました(私はそれを見つけることができません)。これは、OWINとNinjectの両方がアプリケーションの開始点を所有したいので、大きなラットネストになります。 Ninjectもそこで最も遅いDIコンテナの1つであることを考慮すると、私は個人的に統合しやすい別のコンテナを見つけるでしょう。 – NightOwl888

+0

アドバイスをいただきありがとうございますが、これは進行中のプロジェクトですので、ninjectを何かに変更することはオプションですが、後で行います。 – Santhos