2009-05-16 5 views
6
Résolution

Je donne les résultats suivants:Château de Windsor et génériques

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

Dans ce cas, comment puis-je faire la détermination.

Vive Anthony

Répondre

12

vdhant - Ce n'est pas comment les conteneurs sont destinés à être utilisés. Vous souhaitez utiliser ISubject, right ?. Ensuite, si vous avez réussi T vous casser votre abstraction, parce que votre appelant doit savoir que ISubject, est en fait un sujet, et plus que cela, est un Subject<T> et qu'il a besoin d'un béton T.

Aucun conteneur permettra que , mais c'est un problème de conception, pas un problème d'outil.

Une chose à fixer votre conception, serait de rendre explicite - changement ISubject-ISubject<T>

Ensuite, vous pouvez vous inscrire type générique ouvert ISubject<> et le lier à ouvrir type générique Subject<>.

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

Ensuite, vous seriez en mesure de faire

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

Vous n'a fourni aucun contexte pour que je puisse être hors de la piste avec la réponse, mais une chose est sûre - vous avez un problème de conception.

+0

Cool donc ce que je veux dire c'est que je dois fournir une version générique de l'interface et ensuite je peux faire ce que je veux faire ... ça me semble bien. Merci – vdhant

+0

merci m'a sauvé .. –

+0

heureux d'aider @EhsanSajjad –