Могу ли я использовать StructureMap для возврата всех реализаций универсального интерфейса для определенного параметра типа - PullRequest
8 голосов
/ 20 августа 2009

У меня есть общий интерфейс, IValidator. Я хочу иметь возможность использовать StructureMap для получения списка всех классов, которые реализуют IValidator для данного типа T. Например,

var PersonValidators = ObjectFactory.GetAllInstances<IValidator<Person>>();
var AddressValidators = ObjectFactory.GetAllInstances<IValidator<Address>>();

Я знаю, как извлечь ВСЕ классы, которые реализуют IValidator, но мне нужно отфильтровать его по типу параметра типа.

Может ли кто-нибудь дать мне какие-либо рекомендации или предложения?

Спасибо.

1 Ответ

11 голосов
/ 11 октября 2009

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

ObjectFactory.Initialize(x =>
{
    x.Scan(scan =>
    {
        scan.TheCallingAssembly();
        scan.WithDefaultConventions();
        scan.AddAllTypesOf<IValidator<Person>>();
        scan.AddAllTypesOf<IValidator<Address>>();
    });
});

var PersonValidators = ObjectFactory.GetAllInstances<IValidator<Person>>();
...