2009-05-16 26 views
6

Tengo el siguiente:castillo de Windsor solucionar y genéricos

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

En este caso, ¿cómo puedo hacer la determinación.

Saludos Anthony

Respuesta

12

vdhant - No es así como se supone contenedores para ser utilizado.

Quiere usar ISubject, ¿verdad ?. Entonces, si pasó T, está rompiendo su abstracción, porque su interlocutor debe saber que ISubject, en realidad es un Sujeto, y más que eso, es un Subject<T> y que requiere un concreto T.

Ningún contenedor permitirá eso , pero es un problema de diseño, no de herramientas.

Una cosa a fijar su diseño, sería para que sea explícita - cambiar ISubject a ISubject<T>

Posteriormente, se podría registrar abierta genérica tipo ISubject<> y enlazarlo a abrir el tipo genérico de Subject<>.

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

entonces sería capaz de hacer

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

usted no proporcionó ningún contexto, así que puede estar fuera de la pista con la respuesta, pero una cosa es segura - usted tiene una problema de diseño.

+0

Genial, lo que quiero decir es que necesito proporcionar una versión genérica de la interfaz y luego puedo hacer lo que quiero hacer ... me parece bien. Cheers – vdhant

+0

Gracias me salvó .. –

+0

Feliz de ayudar a @EhsanSajjad –

Cuestiones relacionadas