7

リソースを取得するカスタムDB実装を追加するためにProperty Injectionを実行するためにインスタンス化されたResourceProviderFactoryへの参照を取得できるASP.NET MVCはどこにありますか?カスタム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