У меня есть .net-приложение, которое предоставляет механизм для расширения приложения с помощью плагинов. Каждый плагин должен реализовать плагин-интерфейс и должен предоставить дополнительно конструктор, который получает один параметр (контекст ресурса).
Во время создания класса плагина я просматриваю через отражение, если существует необходимый конструктор, и если да, я создаю экземпляр класса (через Reflection). Если конструктор не существует, я выдаю исключение, в котором говорится, что плагин не может быть создан, потому что желаемый конструктор недоступен.
Мой вопрос в том, есть ли способ объявить подпись конструктора в интерфейсе плагина, чтобы каждый, кто реализует плагин-интерфейс, должен также предоставить конструктор с нужной сигнатурой. Это облегчило бы создание плагинов.
Я не думаю, что такая возможность существует, потому что я считаю, что такая функция не входит в основную цель для того, для каких интерфейсов были разработаны, но, возможно, кто-то знает выражение, которое делает это, например:
public interface IPlugin {
ctor(IResourceContext resourceContext);
int AnotherPluginFunction();
}
Я хочу добавить, что я не хочу изменять конструктор без параметров и затем устанавливать ресурс-контекст через свойство, потому что это сделает создание плагинов намного более сложным. Лица, которые пишут плагины, не являются людьми с глубоким опытом программирования. Плагины используются для расчета статистических данных, которые будут визуализироваться приложением.
Спасибо за все ответы.
Ive решил, что я позволю ему быть интерфейсом, потому что я не хочу заставить программистов-плагинов наследовать от абстрактного класса, чтобы он или она терял возможность наследовать из собственного базового класса. Кроме того, вывод из абстрактного класса не гарантирует, что программист плагина действительно предоставляет необходимый конструктор. Это делает его еще более вероятным (у программиста все еще есть возможность добавить только один конструктор, который содержит желаемый параметр, но также имеет дополнительные параметры, и это также плохо. См. Комментарии к ответу Кена Браунинга).
Хотя я упомянул в своем посте, что я не хочу такого имущества, я отметил ответ Дэнни Варода как принятый, потому что я считаю в своей ситуации его наиболее подходящее решение. Спасибо всем, кто ответил.