Пользовательский ввод зависимостей ResourceProviderFactory
Есть ли где-нибудь в ASP.NET MVC, где вы можете получить ссылку на ResourceProviderFactory, который создается для выполнения инъекции свойства для добавления пользовательской реализации БД для получения ресурсов?
У меня загружается пользовательский поставщик ресурсов, но я хотел узнать, есть ли альтернатива использованию контейнера Static DI для внедрения зависимости в Provider.
Подобно тому, как вы можете вводить для поставщиков ролей и членства в MVC.
1 ответ
Хитрость заключается в том, чтобы реализовать вызовы компонентов инфраструктуры в MVC DependencyResolver.Current
, так что вы можете зарегистрировать реальный ResourceProviderFactory
используя ваш любимый контейнер DI.
Вот такой класс, который сделает свое дело:
public class MvcResourceProviderFactory : ResourceProviderFactory
{
public override IResourceProvider CreateGlobalResourceProvider(
string classKey)
{
return GetFactory().CreateGlobalResourceProvider(classKey);
}
public override IResourceProvider CreateLocalResourceProvider(
string virtualPath)
{
return GetFactory().CreateLocalResourceProvider(virtualPath);
}
private static ResourceProviderFactory GetFactory()
{
var resolver = DependencyResolver.Current;
var factory = resolver.GetService<ResourceProviderFactory>();
if (factory != null)
{
return factory;
}
throw new InvalidOperationException(string.Format(
"No {0} has been registered in the {1}.",
typeof(ResourceProviderFactory).FullName,
DependencyResolver.Current.GetType().FullName));
}
}
Этот класс можно настроить следующим образом:
<globalization
resourceProviderFactoryType="MyApp.MvcResourceProviderFactory, MyApp"
enableClientBasedCulture="true" uiCulture="auto" culture="auto"
/>