Получить соответствующий вид для типа из Виндзора - PullRequest
2 голосов
/ 30 сентября 2010

У меня определены следующие классы:

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 Ответ

2 голосов
/ 30 сентября 2010

Нет встроенного метода, потому что он не нужен. Причина, по которой это не нужно, состоит в том, что в реальном приложении вы никогда не извлечете компонент непосредственно из контейнера - вместо этого вы используете типизированную фабрику.

Типизированный завод можно легко научить справляться с этим сценарием. Посмотрите на этот пост .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...