我正在使用 Autofac 作为容器时新尝试加密应用程序块。
因此,我使用的是 nuget 包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 我正在尝试将 CryptographyManager 注入 MyService。
我的引导代码如下所示:
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
有谁有这种技术组合的经验?
经过一些测试,我相信我可能会使用 Unity 容器,因为我对 IOC 容器没有偏好,除了我使用的任何东西都应该与 ASP.NET MVC3 和 http 托管的 WCF 服务很好地集成。
然后我的引导代码变得更加简单:
var container = new UnityContainer()
.AddNewExtension<EnterpriseLibraryCoreExtension>();
container.RegisterType<IMyService, MyService>();