7

在 ASP.NET MVC 中是否有任何地方可以获取对实例化的 ResourceProviderFactory 的引用,以便执行属性注入以添加自定义 DB 实现以从中检索资源?

我正在加载一个自定义资源提供程序,但我想知道是否有替代方法可以使用静态 DI 容器在提供程序中注入依赖项。

类似于在 MVC 中为 Role 和 Membership 提供程序注入的方式。

4

1 回答 1

4

诀窍是在 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"
/>
于 2012-05-17T09:34:04.300 回答