2012-03-08 11 views
0

Autofacをコンテナとして使用しているときに、暗号化アプリケーションブロックを新たに試しています。RijndaelManaged、EnterpriseライブラリとAutofacの併用

結果として、ナゲットパッケージEntLibContrib 5.0 - Autofac Configuratorを使用しています。

DPAPI Symmetric Crypto Providerを使用すると、データを暗号化/復号化できました。

はしかし、RijndaelManagedで、私はしてActivationExceptionを受け取る:

Microsoft.Practices.ServiceLocation.ActivationException:タイプISymmetricCryptoProvider、キー "RijndaelManaged" ---> Autofacのインスタンスを取得しようとしたときに、ライセンス認証エラーが発生しました。 Core.Registration.ComponentNotRegisteredException:要求されたサービス 'RijndaelManaged(Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.ISymmetricCryptoProvider)'が登録されていません。この例外を回避するには、サービスを提供するコンポーネントを登録するか、IsRegistered()を使用してサービス登録を確認するか、ResolveOptional()メソッドを使用してオプションの依存関係を解決します。

手順ごとに:http://msdn.microsoft.com/en-us/library/ff664686(v=pandp.50).aspx 私はMyServiceにCryptographyManagerを注入しようとしています。

私のブートストラップコードは次のようになります。

 var builder = new ContainerBuilder(); 
     builder.RegisterEnterpriseLibrary(); 
     builder.RegisterType<MyService>().As<IMyService>(); 
     _container = builder.Build(); 

     var autofacLocator = new AutofacServiceLocator(_container); 
     EnterpriseLibraryContainer.Current = autofacLocator; 

のApp.configがsymmetricCryptoProviders用に定義され、この情報を持っています

name: RijndaelManaged 
type: Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
algorithmType:System.Security.Cryptography.RijndaelManaged 
protectedKeyFilename:[path_to_my_key] 
protectedKeyProtectionScope: LocalMachine 

誰もが技術のこの組み合わせでの経験がありますか?

いくつかのテストの後、私は、ASP.NET MVC3とhttpホスト型WCFサービスとうまく統合する必要があるもの以外のIOCコンテナに優先度がないため、Unityコンテナを使用することができると考えています。

私のブートストラップコードは、より簡単になる:

var container = new UnityContainer() .AddNewExtension<EnterpriseLibraryCoreExtension>(); container.RegisterType<IMyService, MyService>();

答えて

1

私は実際に(P & Pの人々の一部からいくつかの助けを借りて)Autofac EntLibコンフィギュレータを書きました。それは例外処理ブロックとロギングブロックでテストされていますが、私は暗号化のものでそれを試していません。

EntLibはそれが時々命名されるように登録されたサービスを必要と面白いものを持っている、と私はそれが言う例外から推測している...

type ISymmetricCryptoProvider, key "RijndaelManaged" 

...私はEntLibはあなたを望んでいると思っています名前のサービスを登録するには、のように:

builder.Register(c => 
       { 
        // create the HashAlgorithmProvider using 
        // RijndaelManaged algorithm 
       }) 
     .Named<ISymmetricCryptoProvider>("RijndaelManaged"); 

再び、私はそれで経験を得たか、それをテストしていませんでした、ので、私は一種の正確な登録で推測しているが、アイデアはEntLibをしようとしていることです登録サービス実際のサービスはという名前でに登録されていません。

拡張子は基本的に拡張され、Unityが名前付き/名前のない登録を行うのと同じアルゴリズムを使用しようとします。私はあなたが何かが正しく処理されていない辺りのケースに遭遇したと思います。 EntLibは、それを抽象化しようとしたとしても、Unityと結びついています。

あなたがオートファックに縛られていないのであれば、ユニティはあなたにとって最も摩擦の少ない道筋になります。私は使いやすさとAutofacのより軽量な性質が好きで、私のアプリはそれに縛られているので、私はそのように働くためにすべてが必要でした。あなたがそのような親和性を持たないならば、Unityを使うほうが簡単かもしれません。

大変申し訳ありません。 IoCのEntLibワイヤーアップは本当に複雑な獣です。

+0

フィードバックいただきありがとうございます。私はこれを今後も心に留めておきます。 私はすでにUnityに切り替えていたので、私のニーズにはうまくいくようですが、私はあなたの理論をテストするのに時間を費やしませんでした。 あなたの答えは技術的には答えですので、私はそれをそのようにマークします。 – Ken

関連する問題