Разрешить общий интерфейс с Windsor, не зная тип во время компиляции? - PullRequest
3 голосов
/ 21 апреля 2011

С Виндзор я могу сделать это:

var validators = container.ResolveAll<IEntityValidator<Product>>();

Но я не знаю тип при компиляции. Мне нужен код больше как это:

var type = obj.GetType();
var validators = container.ResolveAll<IEntityValidator<...type...>>();

Очевидно, что приведенный выше код не является правильным решением. Я предполагаю, что нужна какая-то магия восстановления. Если это вообще возможно с Виндзор. Это так?

Ответы [ 3 ]

8 голосов
/ 21 апреля 2011

Возможно, это не совсем завершено, но, возможно, оно близко к тому, что вы хотите сделать:

var typeParam = obj.GetType();
var type = typeof(IEntityValidator<>).MakeGenericType(typeParam);
container.Resolve(type);
1 голос
/ 21 апреля 2011

Вы можете изготовить вручную нужный тип, используя отражение.Как то так:

var wantedGenericParam = obj.GetType();
var genericType = typeof(IEntityValidator<>).MakeGenericType(wantedGenericParam);
var allValidators = container.ResolveAll(genericType);
0 голосов
/ 21 апреля 2011

Короткий ответ - нет.То, что делается container.ResolveAll<IEntityValidator<Product>>(), решается во время компиляции, а не во время выполнения.Это выполнение, которое происходит во время выполнения.

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