在 ASP.NET MVC 中是否有任何地方可以获取对实例化的 ResourceProviderFactory 的引用,以便执行属性注入以添加自定义 DB 实现以从中检索资源?
我正在加载一个自定义资源提供程序,但我想知道是否有替代方法可以使用静态 DI 容器在提供程序中注入依赖项。
类似于在 MVC 中为 Role 和 Membership 提供程序注入的方式。
在 ASP.NET MVC 中是否有任何地方可以获取对实例化的 ResourceProviderFactory 的引用,以便执行属性注入以添加自定义 DB 实现以从中检索资源?
我正在加载一个自定义资源提供程序,但我想知道是否有替代方法可以使用静态 DI 容器在提供程序中注入依赖项。
类似于在 MVC 中为 Role 和 Membership 提供程序注入的方式。
诀窍是在 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"
/>