public interface IFoo {}
public interface IBar {}
public class Foo1 : IFoo {}
public class FooOne : IFoo {}
public class FooTwo : IFoo {}
public class BarOne : IBar
{
public BarOne(IFoo foo) {}
}
public class BarTwo : IBar
{
public BarTwo(IFoo foo) {}
}
class Program
{
static void Main(string[] args)
{
UnityContainer container = new UnityContainer();
container.RegisterType<IFoo, FooOne>("One")
.RegisterType<IFoo, FooTwo>("Two")
.RegisterType<IBar, BarOne>("One")
.RegisterType<IFoo, BarTwo>("Two");
string fooType = "One";
string barType = "Two";
IFoo myFoo = container.Resolve<IFoo>(fooType);
IBar myBar = container.Resolve<IBar>(barType);
}
}
코드 샘플은 위의이 오류가 발생합니다 : 종속성의Unity에서 명명 된 레지스터 유형을 사용하여 종속성을 해결하는 방법은 무엇입니까?
해결이 실패 유형 = "ConsoleApplication5.IBar"이름 = "2"를. 예외가 발생하는 동안 : 해결하는 중입니다. 예외는 다음과 같습니다. InvalidOperationException - 현재 유형 인 ConsoleApplication5.IFoo가 인터페이스이므로 을 구성 할 수 없습니다. 형식 매핑이 누락 되었습니까? ----------------------------------------------- 예외의 시간, 컨테이너이었다 생성자 ConsoleApplication5.BarTwo (ConsoleApplication5.IFoo foo에)의 파라미터 "foo에" 해결 ConsoleApplication5 해결 ( ConsoleApplication5.IBar 두에서 매핑)
해결 ConsoleApplication5.BarTwo, 두. IFoo, (없음)
내 솔루션이 줄 변경DependencyResolver
사용
:
IBar myBar = container.Resolve<IBar>(barType);
를 이에
:
IBar myBar = container.Resolve<IBar>(barType, new DependencyOverride<IFoo>(myFoo));
나는 RegisterType
방법을 사용하여이 문제를 해결하려면. 가능하거나 다른 해결책이 있습니까?
감사합니다.
일부 세부 정보가 누락되었습니다. IMessageType을 컨테이너의 코드 어딘가에 등록해야합니다. – Tilak
@Tilak 게시물을 편집합니다. 오류 메시지는 원래 코드에 속합니다. 이제 단순화 된 버전의 오류 메시지를 볼 수 있습니다. –