7

在ASP.NET MVC的哪里可以获得对实例化的ResourceProviderFactory的引用,以执行属性注入来添加自定义数据库实现以从中检索资源?自定义ResourceProviderFactory依赖注入

我有一个自定义资源提供程序正在加载,但我想知道是否有替代使用静态DI容器注入提供程序内的依赖关系。

与您如何为MVC中的角色和成员资格提供程序注入类似。

回答

4

诀窍是将基础设施组件调用实现为MVC的DependencyResolver.Current,因此您可以使用您最喜爱的DI容器注册真实的ResourceProviderFactory

这里有这样一类是会做的伎俩:

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" 
/> 
+1

我给你这个正确的答案,因为它回答了这个问题。我意识到这种方法实现我正在寻找的东西,但我更感兴趣的是,如果有另一种方法来处理依赖注入,而不是使用我目前正在使用的上述方法。 – Trotts

+0

我一直在努力与此一段时间,我发现,最好的方法,好或坏... – retslig