2009-10-02 4 views
3

저는 Unity 의존성 주입 프레임 워크를 사용하고 있습니다. 두 클래스가 있습니다. 각 클래스는 생성자에서 동일한 위임 매개 변수를 사용합니다. 해결 될 때 각 클래스는 다른 메소드를 가져야합니다. 속성을 사용하지 않고 이것을 설정할 수 있습니까? 만약 당신이 속성으로 어떻게 할 것인가?유니티와 델리게이트

답변

3

그래, 당신은 속성이나 생성자 매개 변수를 [Dependency] 속성으로 꾸밀 수 있습니다.

이 예 대리자를 사용하지 않고, 단지 대신 인터페이스를 사용하고 있지만, 다른 이름으로 등록되는 동일한 인터페이스의 두 나타내고, 클래스 생성자에서 특별히 요구 :

[TestClass] 
    public class NamedCI 
    { 
     internal interface ITestInterface 
     { 
      int GetValue(); 
     } 

     internal class TestClassOne : ITestInterface 
     { 
      public int GetValue() 
      { 
       return 1; 
      } 
     } 

     internal class TestClassTwo : ITestInterface 
     { 
      public int GetValue() 
      { 
       return 2; 
      } 
     } 

     internal class ClassToResolve 
     { 
      public int Value { get; private set; } 

      public ClassToResolve([Dependency("ClassTwo")]ITestInterface testClass) 
      { 
       Value = testClass.GetValue(); 
      } 
     } 

     [TestMethod] 
     public void Resolve_NamedCtorDependencyRegisteredLast_InjectsCorrectInstance() 
     { 
      using (IUnityContainer container = new UnityContainer()) 
      { 
       container.RegisterType<ITestInterface, TestClassOne>("ClassOne"); 
       container.RegisterType<ITestInterface, TestClassTwo>("ClassTwo"); 
       container.RegisterType<ClassToResolve>(); 

       var resolvedClass = container.Resolve<ClassToResolve>(); 

       Assert.AreEqual<int>(2, resolvedClass.Value); 
      } 
     } 

     [TestMethod] 
     public void Resolve_NamedCtorDependencyRegisteredFirst_InjectsCorrectInstance() 
     { 
      using (IUnityContainer container = new UnityContainer()) 
      { 
       container.RegisterType<ITestInterface, TestClassTwo>("ClassTwo"); 
       container.RegisterType<ITestInterface, TestClassOne>("ClassOne"); 
       container.RegisterType<ClassToResolve>(); 

       var resolvedClass = container.Resolve<ClassToResolve>(); 

       Assert.AreEqual<int>(2, resolvedClass.Value); 
      } 
     } 
    } 
0

대신 개체 생성자에서 팩터 리를 전달할 수 있습니다. 그렇게하면 어떤 객체가 생성되었는지 코드에서 정확히 보장 할 수 있습니다.

관련 문제