2010-09-30 4 views
2

je les classes suivantes définies:Obtenez la vue correspondant à un type de Windsor

public interface IShapeView 
{ 
    void DoSomethingWithShape(Shape shape); 
} 
public interface IShapeView<T> where T : Shape 
{ 
    void DoSomethingWithShape(T shape); 
} 

public class CircleView : IShapeView<Circle>, IShapeView 
{ 
    public void DoSomethingWithShape(Circle shape) 
    { 
     MessageBox.Show("Circle:" + shape.Radius); 
    } 
    void IShapeView.DoSomethingWithShape(Shape shape) 
    { 
     DoSomethingWithShape((Circle)shape); 
    } 
} 
public class Circle : Shape 
{ 
    public Circle() 
    { 
     Radius = 1.0; 
    } 

    public double Radius { get; set; } 
} 

Et l'inscription suivante:

container.Register(Component.For<IShapeView<Circle>>().ImplementedBy<CircleView>()); 

Y at-il une méthode que je peux appeler pour résoudre une vue quand je n'ai que le type de la forme? Ou ai-je besoin d'utiliser la réflexion pour créer les arguments de type générique pour obtenir le type correct de IShapeView que je veux? Vous cherchez quelque chose comme ceci:

Type shapeType = typeof(Circle); 
IShapeView view = (IShapeView) container.SomeResolveMethod(shapeType, typeof(IShapeView<>)); 

Répondre

2

Il n'y a pas de méthode intégrée car elle n'est pas nécessaire. La raison pour laquelle ce n'est pas nécessaire est que dans une application réelle, vous ne tireriez jamais le composant directement du conteneur - vous utiliseriez une fabrique typée à la place.

Une usine dactylographiée peut facilement être enseignée pour gérer ce scénario. Jetez un oeil at this post.

+0

Merci, c'est ce que je cherchais! –

Questions connexes