7

プロパティ インジェクションを実行してリソースを取得するカスタム DB 実装を追加するためにインスタンス化された ResourceProviderFactory への参照を取得できる ASP.NET MVC の場所はありますか?

カスタム リソース プロバイダーをロードしていますが、静的 DI コンテナーを使用してプロバイダー内に依存関係を注入する以外に方法があるかどうかを知りたいと思いました。

MVC で Role および Membership プロバイダーに注入する方法と同様です。

4

1 に答える 1

4

トリックは、MVC の にインフラストラクチャ コンポーネント呼び出しを実装することです。これにより、お気に入りの DI コンテナーを使用してDependencyResolver.Current実際に登録できます。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"
/>
于 2012-05-17T09:34:04.300 に答える