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