从Windsor获取相应的View类型

时间:2010-09-30 01:07:51

标签: .net dependency-injection castle-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; }
}

以下注册:

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

当我只有形状的类型时,是否有一种方法可以调用来解析视图? 或者我是否需要使用反射创建泛型类型参数来获取我想要的正确类型的IShapeView?寻找这样的东西:

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

1 个答案:

答案 0 :(得分:2)

没有内置方法,因为它不需要。不需要的原因是,在实际应用中,您永远不会直接从容器中拉出组件 - 而是使用类型化的工厂。

可以轻松地教授打字工厂来处理这种情况。看看at this post