Я недавно экспериментирую с блоком приложения криптографии, используя 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.Practiseurity. 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 эта информация определена для symricCryptoProviders:
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 и службами WCF, размещенными на http.
Тогда мой начальный код станет более простым:
var container = new UnityContainer()
.AddNewExtension<EnterpriseLibraryCoreExtension>();
container.RegisterType<IMyService, MyService>();