У меня есть хост-приложение, которое предоставляет интерфейс плагина, который может быть реализован плагинами. При инициализации плагин хостов приложение проходит в реестре StructureMap поэтому плагин может зарегистрировать вещиПолучение производного типа из зарегистрированного общего интерфейса
public interface IAppPlugin
{
void Initialize(IRegistry configure);
}
public class CatPlugin : IAppPlugin
{
public void Initialize(IRegistry configure)
{
configure.For<IFilter<IPet>>()
.Add<CatFilter<IPet>>();
}
}
В моем принимающем приложении у меня есть реализация Ipet, FeralCat, и я хочу получить от StructureMap любых фильтров
ObjectFactory.TryGetInstance<IFilter<FeralCat>>
Я надеялся, что это вернет мне CatFilter фильтр, зарегистрированный мой плагин, но оно не (что имеет смысл, на самом деле, я гавань зарегистрирован тип соответствия)
Мой плагин не знает о FeralCat, как я могу настроить StructureMap вернуть CatFilter?
спасибо за ваш ответ, но я уже пробовал это, и structmap выбрасывает «элемент с тем же ключом уже добавлен », поскольку аргумент CatFilter является общим (хотя и ограниченным), а не интерфейсом ... public class CatFilter: IFilter где TModel: IPet –
Dve
Я действительно пробовал это в тесте, определяя CatFilter точно так же, как вы. Оно работает. В вашем коде должно быть что-то большее, что дает вам исключение. – doblak