2009-05-16 27 views
6

Mam następujący:Zamek Windsor rozdzielcza i generyczne

public interface ISubject { ... } 

public class Subject<T> : ISubject { ... } 

public class MyCode<T> { 
    ... 
    pulic void MyMethod() 
    { 
     var item = container.Resolve<ISubject>(); //????? how do I pass in T 
    } 
    ... 
} 

W tym przypadku, jak to zrobić determinację.

Cheers Anthony

Odpowiedz

12

vdhant - To nie jest jak pojemniki mają być użyte.

Chcesz użyć ISubject, prawej ?. Następnie, jeśli przekazywane T łamiesz swoją abstrakcję, ponieważ Twój rozmówca musi wiedzieć, że ISubject, jest rzeczywiście temat, a co więcej, Jego Subject<T> i że wymaga T. betonu

Bez pojemnika, który pozwoli , ale jest to problem projektowy, a nie narzędzie.

Jedno naprawić swój projekt, byłoby, aby to jednoznacznie - zmień ISubject do ISubject<T>

Następnie można zarejestrować otwarty ogólny typ ISubject<> i powiązać go otworzyć ogólny typ Subject<>.

container.Register(Component.For(typeof(ISubject<>)) 
          .ImplementedBy(typeof(Subject<>))); 

Wtedy byłbyś w stanie zrobić

var fooSubject = container.Resolve<ISubject<Foo>>(); 

nie zawierały żadnych kontekst więc mogę być poza tor z odpowiedzią, ale jedno jest pewne - masz problem projektowy.

+0

Fajnie, więc to, co mam na myśli to, że muszę podać ogólną wersję interfejsu, a następnie mogę zrobić to, co chcę zrobić ... brzmi dla mnie dobrze. Cheers – vdhant

+0

dzięki uratował mnie .. –

+0

chętnie pomoże @EhsanSajjad –

Powiązane problemy