У меня есть интерфейс IModule
и несколько классов, которые его реализуют. В тесте мне нужно создать экземпляр каждого типа (класса), реализующего этот интерфейс. Возможно ли (с StructureMap)?.NET - создать экземпляр каждого типа, который реализует конкретный интерфейс
0
A
ответ
3
Я не знаком с StructureMap. В любом случае вам нужно иметь список типов, реализующих IModule, тогда вы создаете объект каждого типа в списке.
Чтобы получить список типов динамически, это может быть:
var types =
from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetType()
where !type.IsAbstract
where typeof(IModule).IsAssignableFrom(type)
select type;
для конкретизации типов:
IModule[] instances = (
from type in types
select (IModule)Activator.CreateInstance(type))
.ToArray();
3
Чтобы сделать это с помощью StructureMap:
var container = new Container(x => x.Scan(scan =>
{
scan.TheCallingAssembly(); // there are options to scan other assemblies
scan.AddAllTypesOf<IModule>();
}));
var allInstances = container.GetAllInstances<IModule>();
+0
Работает идеально. Спасибо. – Feryt
Смежные вопросы
- 1. Создание объекта каждого типа, который реализует интерфейс
- 2. Получить экземпляр для каждого класса, который реализует интерфейс
- 3. Как указать параметр типа, который НЕ реализует конкретный интерфейс?
- 4. Создать массив объектов, который реализует конкретный протокол
- 5. .Net - Как создать UserControl, который реализует интерфейс? Ошибка с LoadControl
- 6. Как создать экземпляр анонимного класса, который реализует интерфейс в Котлин
- 7. Конкретный класс реализует интерфейс, который знает конкретный класс, который его реализует
- 8. Инстанцировать общий тип, который реализует интерфейс C#
- 9. Лучший способ узнать, если экземпляр (upcast) не реализует конкретный интерфейс.
- 10. Создать тип, который реализует внутренний интерфейс
- 11. единства создать конкретный экземпляр
- 12. Найти тип с сборки, который реализует конкретный интерфейс
- 13. определение машинопись реализует универсальный класс, который реализует общий интерфейс
- 14. расширение класса, который не реализует интерфейс
- 15. Создание экземпляра объекта, который реализует данный интерфейс
- 16. Добавьте обработчик события для каждого класса, который реализует интерфейс
- 17. Расширения Entity Framework DBSet для типа, который реализует интерфейс
- 18. Instantiate класс, который реализует общий интерфейс
- 19. Класс реализует интерфейс, который расширяет другой интерфейс
- 20. Использование класса, который реализует интерфейс
- 21. C# Instantiate класса, который реализует общий интерфейс
- 22. Проверьте объект реализует конкретный общий интерфейс
- 23. Создание экземпляра класса, который реализует общий интерфейс
- 24. .NET Inheritance: возвращает экземпляр класса, который реализует данный интерфейс из функции MusiInherit/abstract
- 25. Проверьте, реализует ли объект общий интерфейс для любого типа типа
- 26. создать (= компилировать) класс во время выполнения, который реализует известный интерфейс
- 27. Как создать базовый адаптер, который имеет параметр типа, который расширяет другой класс и реализует интерфейс?
- 28. Интерфейс .NET/ограничение для объекта, который реализует определенные операторы
- 29. Не удается скомпилировать класс, который реализует интерфейс без параметра типа
- 30. Как узнать, реализует ли экземпляр интерфейс в ActionScript 3.0
работает отлично, но asm.GetTypes() следует отфильтровать, чтобы не возвращать интерфейсы, так как он также возвращает IModule. ... GetTypes(). Где (t =>! T.IsInterface) ... – Feryt
@Feryt: Я добавил 'where! Type.IsAbstract' ответ (после включения ответа в LINQ). Это решает даже больше, чем только '! T.IsInterface'. Обратите внимание, что это не решит все проблемы, потому что некоторым типам может не хватать открытый конструктор по умолчанию или это определение общего типа. – Steven