2017-02-06 1 views
2

Unity를 사용하여 추상 클래스를 해결하고 싶습니다. 추상 클래스에는 특정 제네릭이있는 구현이 있습니다. 예를 들어 :generics를 기반으로 추상 클래스를 해결하십시오.

public abstract class Iface<S, T> where S : SomeClass where T : OtherClass 

public class face : Iface<SomeClassExample, OtherClassExample> 

는 그럼 난 실행할 :

UnityContainer.Resolve<Iface<SomeClassExample, OtherClassExample>>(); 

를하지만 오류 예외가 있습니다 :

경우 InvalidOperationException이 - 추상 클래스의 인스턴스를 만들 수 없습니다.

추상 클래스를 만들기 때문에 분명합니다. Unity가 제네릭을 기반으로 특정 클래스를 찾을만큼 똑똑하기를 바랬습니다. 이렇게 할 수 있습니까?

+3

유니티는 마법 주입 램프가 아닌 의존성 주입 컨테이너입니다. 예를 들어 리플렉션을 통해 구현을 등록하십시오. – Dbl

+0

예'face'를 Unity에 등록하고 코드가'Iface '을 묻는 경우'face'를 사용하도록 지시하십시오. – Brandon

+0

얼굴을 등록해야한다면 여기에서 반사를 사용하는 요점은 무엇입니까? new face() ;을 호출 할 수도 있습니다. – Wouter

답변

0

당신은 명시 적으로 얼굴을 등록해야 등록 할 경우, Iface<SomeClassExample, OtherClassExample>

UnityContainer.Resolve<face<SomeClassExample, OtherClassExample>>(); 

의 인스턴스를 만들려고한다 올바른 제네릭으로 매핑하십시오. 이 실제로 방법 :

UnityContainer.RegisterType<Iface<SomeClassExample, OtherClassExample>, face>(); 

은 비록, 나는

편집 ... 유니티가 자동으로 특정 제네릭에 속하는 올바른 클래스를 인식하는 것이 가능해야한다 믿습니다!

UnityContainer.ConfigureAutoRegistration().Include(type => type.ImplementsOpenGeneric(typeof(Iface<,>)), Then.Register().AsFirstInterfaceOfType()).ApplyAutoRegistration(); 

이 기본 클래스를 구현하는 모든 일반 파생 클래스를 자동으로 등록합니다.

0

face 클래스로 해결하려면 명시 적으로 요청해야합니다. 그냥 오류 메시지가보고 당신이 인터페이스를 생성하는 인터페이스 —로 Iface는을 사용하고

관련 문제