У меня есть интерфейс IExample, а набор классов ClassOne, ClassTwo и ClassThree, все они определены в разных пространствах имен. Я, возможно, удалю любой из классов или добавлю новый в новое место на более позднем этапе разработки.
Теперь я хочу найти все типы, которые реализуют IExample во время выполнения, и создавать их. (Я знаю заранее, что ни один класс, реализующий IExample, никогда не будет нуждаться в каких-либо конструкторских аргументах, но я не знаю, как указать это в коде, чтобы он меня, а не компилятор, - который знает...)
Возможно ли это? Как мне это сделать?
Обновление: Теперь я попробовал несколько предложенных подходов, но на всех из них, строка Activator.CreateInstance(type), я получаю исключение System.MissingMethodException, потому что я не могу создать экземпляр интерфейс." Это мой код:
var tasks = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => typeof(IBootstrapperTask).IsAssignableFrom(t))
// This line is where it fails
.Select(t => Activator.CreateInstance(t) as IBootstrapperTask)
.ToArray();
new AutoMapperBootstrapper(tasks).Initialize();
Без предложения as я не вижу никакого исключения, но мне присваивается object[], и мне нужен IBootstrapperTask[] для конструктора на последней строке в выдержке. Я пробовал разные способы его бросить, но никто не работает.