연합

2014-03-26 2 views
0

에서 단일 인터페이스의 여러 구현을 해결 I가 다음과 같은 시나리오 : 클라이언트 측에서연합

public interface IFoo { } 

public interface IFoo3 { } 

public class Foo4 : IFoo3 { } 

public class Foo1 : IFoo { } 

public class Foo2 : IFoo 
{ 
    Foo2 (IFoo object1, IFoo3 object2) 
} 

:

IUnityContainer container = new UnityContainer(); 
    container.RegisterType<IFoo, Foo1>("Foo1"); 
    container.RegisterType<IFoo3, Foo4>(); 
    container.RegisterType<IFoo, Foo2>("Foo2"); 

    IFoo3 obj = container.Resolve<IFoo3>(); //Resolve 1 

    IFoo obj2 = container.Resolve<IFoo>(); //Resolve 2 

2 (주석 참조) 생성자가 없다는 오류를 제공 결의 찾을 수 없습니다.

기본적으로 Foo2 클래스로 해결하고 싶습니다. 나는 심지어 매개 변수 오버라이드 (parameteroverrides)를 사용하여 시도해 보았지만 그것도 작동하지 않았다.

도와주세요.

+0

실제 코드를 게시 할 수 있습니까? 'Foo2' 클래스의'Foo2' 메소드에 중괄호가 없습니다. –

+1

'Foo2'는 데코레이터입니다. – Steven

+0

가능한 복제본 [InjectionConstructor의 모든 매개 변수를 명시 적으로 지정하지 않고 [데코레이터 패턴을 Unity와 함께 사용하는 방법] (http://stackoverflow.com/questions/6109646/how-do-i-use-the-decorator-pattern- with-unity - 명시 적으로 지정하지 않고) – Steven

답변

1

매개 변수없이 Resolve를 호출하면 당신에게 이름 등록 (NO 이름 등록)의 인스턴스를 가져옵니다.

매개 변수없이 ResolveAll를 호출하면 모든 이름 등록합니다 (이름 등록을 포함하지 않는다)의 인스턴스를 가져옵니다.

의 등록이 IFoo입니다.