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