Один подход, который я использовал для некоторых проектов:
Создайте интерфейс IPlugin
, который определяет методы, которые вы ожидаете для всех плагинов.В моем случае это была в основном функция Register()
, которая давала плагину возможность делать все, что ему нужно.
Затем используйте Assembly.GetTypes
для перечисления всех типов, определенных в сборке, и поиска классов, которыеопределить этот интерфейс (используя typeof(IPlugin).IsAssignableFrom()
).Продолжайте и используйте эти типы.
Также вы можете взглянуть на фреймворки, такие как MEF , которые делают (среди прочего) именно то, что вы хотите.