Пользовательский ввод зависимостей 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"
/>
Другие вопросы по тегам