2014-12-10 3 views
0

다음 코드는 현재 WCF 서비스 내에서 구현하려는 흐름을 보여줍니다. 시작시 서비스는 Unity를 사용하여 필요한 유형을 등록하고 해결하는 Bootstrapper 클래스를 호출합니다. 게이트웨이 클래스에는 메시지 처리의 주요 흐름을 시작하는 public 메서드가 포함되어 있습니다 (아래에 표시된 것보다 더 많은 코드 수준이 있습니다). 종속성 삽입을 사용하여 모든 클래스에 고유 한 값을 전달 하시겠습니까?

public static class Bootstrapper 
{ 
    public static IGateway InitializeGateway() 
    { 

     IUnityContainer resolver = new UnityContainer(); 

     resolver.RegisterType<IGateway, Gateway>(); 
     resolver.RegisterType<ITranslator, Translator>(); 
     resolver.RegisterType<IFormatter, IFormatter>(); 

     return resolver.Resolve<IGateway>(); 
    }  

} 

public class Gateway : IGateway 
{ 

    private readonly ITranslator translator; 
    private readonly IFormatter formatter; 

    public Gateway(ITranslator translator, IFormatter formatter) 
    { 
     this.translator = translator; 
     this.formatter = formatter; 
    } 

    public string ProcessMessage(string requestMessage) 
    { 
     // Create a new GUID for use in main flow for logging 
     Guid messageGuid = Guid.NewGuid(); 

     requestMessage = this.translator.TranslateMessage(requestMessage); 

     requestMessage = this.formatter.FormatMessage(requestMessage); 

     return requestMessage; 
    } 
} 

지금 내가 무엇을 달성하기 위해 노력하고있어 (각 메시지에 대해 생성) GUID를 가지고 각 클래스는 로깅 목적에 대한 참조를 갖도록 서비스의 흐름 내에서이 물려있다.

DI 및 생성자 주입을 사용하는 방법을 찾으려고했지만 게이트웨이가 메시지를 받으면 (부트 스트 래퍼 호출 후) GUID가 만들어지기 때문에이 작업을 수행 할 수 있는지 여부를 알 수 없습니다. 내가 멀리에서 얻으려고 노력하는 매개 변수로 각 메서드에 GUID를 전달합니다.

제안 사항?

+0

내가 알 수있는 한, 게이트웨이를 한 번만 확인한 다음 해당 게이트웨이를 사용하여 여러 메시지를 처리 ​​할 수 ​​있습니까? 그렇다면 IOC 컨테이너를 통한 DI가 어떻게 도움이되는지 알지 못합니다. 그것은 당신이 메시지를 받기 시작할 때까지 일을합니다. GUID를 사용하여 각 메시지의 식별자 역할을합니다. 왜 GUID와 requestMessage 문자열을 Message 클래스로 캡슐화 할 수 없습니까? 그런 식으로 메시지를받는 모든 메소드는 ID에 액세스 할 수 있습니다. – olitee

답변

관련 문제