Замок Виндзор разрешает сопоставление универсального типа - PullRequest
0 голосов
/ 17 июня 2019

Это упрощенная версия проблемы, с которой я сталкиваюсь.

Допустим, мое приложение содержит несколько реализаций "машины".У каждого автомобиля есть соответствующая модель вида, используемая для редактирования деталей автомобиля, что-то вроде этого:

public class Ford : ICar
{
}

public interface IEditorVm<TCar>
    where TCar : ICar
{
}

public class FordEditor : IEditorVm<Ford>
{
}

Предположим, что я регистрирую все классы с использованием Castle Windsor следующим образом:

container.Register(
    Classes.FromThisAssembly()
    .BasedOn(typeof(ICar))
    .WithServiceFirstInterface());
container.Register(
    Classes.FromThisAssembly()
    .BasedOn(typeof(IEditorVm<>))
    .WithServiceFirstInterface());

Наконец, появится пользовательский интерфейс, который отображает список автомобилей (которые я могу залить, используя ICar[]).

Когда пользователь выбирает автомобиль, я хочу разрешить соответствующую виртуальную машину, но единственные примеры разрешения обобщенных типов, которые я видел, включают указание типа (например, var vm = container.Resolve<IEditorVm<Ford>>();).

Просмотрза предложения о том, как этого добиться.Конечно, я мог бы слишком стараться решить эту проблему, используя Виндзор, когда другой дизайн мог бы обеспечить более подходящее решение ...

...