2012-10-09 6 views
1

필자는 최근 기업용 라이브러리 5와 Unity를 사용했습니다. 나는 서핑을하고 "Service Locator is Anti Pattern"이라는 히스를 읽기 시작하기 전까지 제공된 예제에 대해 매우 만족했습니다. 거기에서 나는 Composite Root와 Hollywood Principal에서 "우리에게 전화하지 마라, 우리는 당신에게 전화 할 것"이라는 글을 발견했다.할리우드 교장 : 이해가 안됩니다

복합 루트의 이점을 이해하고 있지만 응용 프로그램에 필요한 클래스의 인스턴스를 가져 오기 위해 호출하지 않는 방법을 이해하고 있다고 생각합니다. 그래서 나는 전체적인 생각을 오해하고 있을지도 모른다고 생각합니다.

이 방법은 중앙 집중식 공장 패턴을 수행하는 새로운 방법입니다. 그러나 어느 시점에서 필자는 인스턴스를 얻기 위해 Factory Pattern을 호출해야합니다. 따라서 아래 코드는 필자가 읽은 Unity 컨테이너가 앱의 루트 (양식이 아닌) 근처에 만들어 져야한다는 것을 보여줍니다. 그런 다음 예외 처리 및 로깅을 위해 DI를 처리해야합니다. 나는 다시 용기를 호출하는 TaxCalculatorFactory에게 전화를 걸거나 그냥 내가 어떻게받을 수 있나요, 컨테이너 자체를 호출하지 못할 경우,

public partial class Form1 : Form 
    { 
     public IUnityContainer Container { get; protected set; } 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 
      this.Container = new UnityContainer().AddNewExtension<EnterpriseLibraryCoreExtension>(); 
      try 
      { 
       throw new NullReferenceException("Mucking around."); 
      } 
      catch (Exception ex) 
      { 
        TaxCalculator calc = this.Container.Resolve<TaxCalculator>(new ParameterOverride("fire", 888)); 
        calc.LogWriter.Write(calc.Fire, "muckaround"); 
      } 
     } 


public class TaxCalculator 
{ 
    private ExceptionManager _exceptionManager; 
    public LogWriter LogWriter { get; protected set; } 

    public string Fire { get; set; } 

    public TaxCalculator(ExceptionManager em, LogWriter lw, int fire) 
    { 
     this._exceptionManager = em; 
     this.LogWriter = lw; 
     this.Fire = fire.ToString(); 
    } 
} 

문제가 (이 그것이 무의미 의미 그래서 단 2 분 플레이 코드 참고) 특정 유형의 세금 계산기?

어떻게/어디에서 인스턴스를 가져 옵니까? 앱을 시작하거나, 앱 수명 기간 동안 필요하거나 필요하지 않을 수도있는 많은 팩토리를 만든 다음, 팩토리에서 앱 요청 인스턴스의 다양한 레이어를 가질 수 있습니까? 내가 많은 공장 참조를 돌아 다니는 것처럼 보이므로 어떤 이점이 있는지 모르겠다. 아니면 컨테이너에서 정적 클래스를 초기화하고 호출해야합니까?

당신은 할리우드 교장의 생각을 다시 한 번 볼 수 있습니다.

답변

0

서비스 로케이터의 한 가지 대안은 개체 생성 중에 종속성을 주입 할 수있는 IoC 컨테이너를 사용하는 것입니다.

This SO questionAutofac article on object reference types을 가리키는 유사한 질문을합니다. IoC 컨테이너가이 문제를 어떻게 해결할 수 있는지에 대한 아이디어를 줄 것입니다.

관련 문제