我正在尝试使用Autofac作为容器的加密应用程序块。一起使用RijndaelManaged,企业图书馆和Autofac
因此,我正在使用nuget包EntLibContrib 5.0 - Autofac Configurator。
使用DPAPI对称密码提供程序,我能够很好地加密/解密数据。
然而,随着RijndaelManaged的,我收到一个ActivationException:尝试获取类型ISymmetricCryptoProvider,键 “RijndaelManaged的” ---> Autofac的情况下发生激活错误:
Microsoft.Practices.ServiceLocation.ActivationException。 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>();
感谢您的反馈。我将来会记住这一点。 因为我已经转向Unity,并且它似乎能满足我的需求,所以我没有花时间去测试你的理论。 您的答案在技术上是答案,所以我会将其标记为这样。 – Ken 2012-03-12 14:11:15