2009-05-16 3 views
6

Ho il seguente:Castello di Windsor e Risoluzione dei farmaci generici

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 
    } 
    ... 
} 

In questo caso come faccio la risoluzione.

Acclamazioni Anthony

risposta

12

vdhant - Non è così che i contenitori sono destinati ad essere utilizzati.

Si desidera utilizzare ISubject, giusto ?. Quindi se hai superato T si sta rompendo la tua astrazione, perché il chiamante deve sapere che ISubject, è in realtà un oggetto, e più di questo, è un Subject<T> e che richiede un concreto T.

Nessun contenitore permetterà che , ma è un problema di progettazione, non un problema di strumenti.

Una cosa per riparare il vostro disegno, sarebbe quello di rendere più esplicito - cambiare ISubject-ISubject<T>

Poi si potrebbe registrare aperta tipo generico ISubject<> e associarlo ad aprire tipo generico Subject<>.

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

allora si sarebbe in grado di fare

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

Lei non ha fornito alcun contesto così posso essere fuori pista con la risposta, ma una cosa è certa - di avere un problema di progettazione.

+0

Cool, quindi, quello che voglio dire è che devo fornire una versione generica dell'interfaccia e quindi posso fare quello che voglio fare ... mi suona bene. Saluti – vdhant

+0

grazie salvami .. –

+0

Felice di aiutare @EhsanSajjad –