2014-02-18 5 views
0

종속성 인젝터에서 클래스의 인스턴스를 가져 오는 방법이 있습니까?종속성을 주입 한 클래스를 인스턴스화

예를 들어, 내 유형을 등록하고이 같은 클래스가 :

public class A { 
    private readonly Iinterface _object; 

    public A (Iinterface object) { 
     _object = object; 
    } 

    //do stuff using _object 
} 

public class B { 
    public void DoSomething() { 
     var instanceOfA = DIContainer.GetInstance(typeof(A)); 
     //do stuff with instanceOfA which has been constructed using DI 
    } 
} 

현재, 내가 주입하는 클래스 A를 등록해야하고 그 클래스 B에 생성자에 주입합니다. Idon't가 자동적으로 주입되는 depedencies와 함께 Unity에서 나에게 만들어 졌던 인스턴스를 얻는 방법이 있으면 나는 그것을 알고있다. 그래서 나는 그것을 등록하거나 객체를 통과 할 필요가 없다.

내가 생각하고있는 실제 사용 사례는 아니지만, 의존성 주입과 Unity를 사용하여 내 옵션에 대해 자세히 배우고 싶습니다.

+1

'A'와'B'의 관계는 무엇입니까? 'A'가'B'에 종속성을 주입 할 수 있습니까? –

+0

예, 제가 현재하고있는 것이지만, 주사하지 않고'A'를 얻을 수있는 방법이 있는지 궁금해합니다. – tau

답변

4

Unity에서는 몇 가지 방법으로 종속성을 얻을 수 있습니다.

  1. 생성자 삽입
  2. 속성 주입
  3. 수동으로 해결할 수는

나는 당신을 위해 무엇을 요구하는지 것은 # 3 믿습니다. 당신의 예에서

, 당신은 클래스에게 의한 경우 (이미는 IInterface를 등록한 부여) 얻을 수 있습니다 : 유니티 생각

unityContainer.Resolve<A>(); 

단순화 된 방법입니다 그것은 당신에게 줄 수있는 정말 스마트 공장입니다 생성자, 속성 또는 메서드를 호출하여 개체를 만듭니다. 어떤 객체 유형이나 인터페이스 유형을 물어 보면, 당신에게 하나를 줄 것이다. 주의 사항은 모호성을 처리하는 방법에 대한 단서를 제공해야합니다. 기본적으로 등록이 이루어지는 곳입니다.

위의 예에서 모호한 점은 Iinterface이므로 등록해야하는 유일한 클래스입니다. 해결 클래스 A 또는 B은 이미 구체적인 유형이므로 등록 할 필요가 없습니다.

+0

설명해 주셔서 감사합니다. DI에 대한 나의 경험은 내가 당신이 쓴 것을 대부분 믿게 만들었지 만, 당신이 그것을 간략하게 설명하고 내가 무엇을 믿었는지를 많이 확인해 주셨습니다. – tau

1

AB 사이의 관계에 따라 결정 BA에 따라

경우 AB에 의존성을 주입하기 위해, 그 때 (혹은 A자체를 주입) 나을.

BA을보고 종속성을 "찾도록"권하지 않습니다. 기껏해야 BA 사이에 강한 의존성이 있습니다. 최악의 경우 "서비스 탐지기"방지 패턴으로 끝납니다.

AB 사이의 종속성을 동일하게 유지해야 할 필요가 없다면 나는 꼭 필요한 것 이상으로 연결하지 않을 것입니다.

+0

나는 당신의 의견에 동의하지만'B'가'A'가 생성자에 주입 된'A'의 의존성 주입 인스턴스를 어떻게해서든지 생성 할 수 있는지 궁금합니다. – tau

+0

그것은 가능할 수도 있습니다 (나는 Unity에 대해 충분히 알지 못합니다). 그러나 여전히 A에 의존성을 만듭니다. A에 의존성이 있다면 A 나 의존성을 주입하는 것이 유효합니다. –

관련 문제