2012-06-25 4 views
2

ServiceAuthorizationManager 구현에 저장소 (단일성 사용)를 주입하고 싶습니다. 가능한가?Unity를 사용하여 ServiceAuthorizationManager에 저장소를 삽입하십시오.

public class APIKeyAuthorization : ServiceAuthorizationManager 
    { 


     private readonly IKeysService _keysService; 

     public APIKeyAuthorization(KeysService keysService) 
     { 
      _keysService = keysService; 
     } 

     protected override bool CheckAccessCore(OperationContext operationContext) 
     { 
      //var _keysService = new KeysService(); 


      string key = GetAPIKey(operationContext); 

      string endpoint = GetEndpoint(operationContext); //ip address 

      if (_keysService.IsValidKey(key, endpoint)) 
      { 
       return true; 
      } 
      else 
      { 
       // Send back an HTML reply 
       CreateErrorReply(operationContext, key); 
       return false; 
      } 
     } 
+0

나는 teh 코드를 제공합니다. 뭐라도 시도해 봤어? 예, 가능하고 덮어 쓰며 재정의 된 클래스에 삽입합니다. http://msdn.microsoft.com/en-us/library/ms731774.aspx – DarthVader

+0

질문이 덮어 쓰기 클래스로 업데이트되었습니다. 다음과 같은 유형을 등록했습니다 : container.RegisterType (); container.RegisterType (); –

답변

1

APIKeyAuthorization을 컨테이너에 등록 할 필요가 없습니다. Unity는 구체적인 클래스를 스스로 해결할 수 있습니다. 당신이 ServiceAuthorizationManager의 또 다른 실시로 APIKeyAuthorization을 주입 할 경우 당신은 컨테이너와 그 매핑을 등록해야합니다

container.RegisterType<ServiceAuthorizationManager, APIKeyAuthorization>(); 

통일 의지의 인스턴스가 될 것입니다 귀하의 경우 IKeyService의 등록 구현 (주입 KeyService)를 APIAuthorization의 생성자에 추가합니다.

APIAuthorization auth = container.Resolve<APIAuthorization>(); 

을 시도하고 당신은 유니티 당신을 위해 IKeyService를 해결하는 것을 볼 수 있습니다.

그러나 실수로 abuse Unity as a ServiceLocator을 입력하지 마십시오.

대신 컨테이너를 composition root of your application에 연결하고 컨테이너의 최상위 수준 개체 만 확인하십시오.

+0

안녕 세바스찬. 귀하의 답변에 감사드립니다. 컨테이너를 설정하기 위해 이미 "부트 스트 래퍼"를 사용하고 있습니다. 귀하의 접근 방식에 따라 나는 문제가있다. APIAuthorization을 해결하면 매개 변수 (예상대로)가있는 생성자가 호출되지만 프레임 워크가 제대로 작동하도록하면 매개 변수없이 생성자로 이동합니다 ... 왜 그런지 알고 있습니까? –

+0

@GuilhermeFerreira 어떤 프레임 워크입니까? Unity는 해결을 위해 가장 많은 인수를 취하는 생성자를 선택합니다. 그건 의도적으로입니다. 프레임 워크가 WCF 인프라를 의미하는 경우 이는 다를 수 있습니다. 내가 아는 한 WCF는 기본 생성자를 호출하고 사용할 수없는 경우 throw합니다. 적어도 그것은 서비스에 해당됩니다. 다른 인프라 구성 요소의 경우에도 동일 할 수 있습니다. –

+0

.net framework 4 + Unity 2.0. 이것은 아무 것도 해결하지 못하는 것 같습니다. 나는 web.config에서 이것을 가지고 있습니다 :

관련 문제