Я хотел бы получить перечисление созданных классов, которые реализуют интерфейс из нескольких сборок в папке решения.
У меня есть следующая структура папок (если это имеет смысл):
Solution
-SolutionFolder
- Project1
- class implementing interface I would like to find
- other classes
- Project2
- class implementing interface I would like to find
- other classes
-MainProject
- classes where my code is running in which I would like to retrieve the list of classes
Следовательно, если реализуемый интерфейс — ISettings
, то я хотел бы, чтобы IEnumerable<ISettings>
ссылался на созданные объекты этого интерфейса.
До сих пор я использовал отражение для извлечения классов, реализующих интерфейс, из известного имени класса:
IEnumerable<ISettings> configuration =
(from t in Assembly.GetAssembly(typeof(CLASSNAME-THAT-IMPLEMENTs-INTERFACE-HERE)).GetTypes()
where t.GetInterfaces().Contains(typeof(ISettings)) && t.GetConstructor(Type.EmptyTypes) != null
select (ISettings)Activator.CreateInstance(t)).ToList();
но это одна сборка, и я не буду знать имена классов.
Можно ли этого добиться с помощью отражения или для этого требуется нечто большее?