У меня есть интерфейс IExample
и набор классов ClassOne
, ClassTwo
и ClassThree
, все они определены в разных пространствах имен.Возможно, я удалю один из классов или добавлю новый на новом месте на более позднем этапе разработки.
Теперь я хочу найти все типы, которые реализуют IExample
во время выполненияи создать их экземпляр .(Я заранее знаю, что ни одному классу, реализующему IExample
, никогда не понадобятся аргументы конструктора, но я не знаю, как указать это в коде, так что это я - не компилятор - знает ...)
Возможно ли это?Как мне это сделать?
Обновление: Я уже попробовал несколько предложенных подходов, но на всех из них, строка Activator.CreateInstance(type)
, я получаю Систему.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[]
для конструктора наПоследняя строка в выдержке.Я пробовал разные способы его разыграть, но ни один из них не работает.