Я реализовал систему «плагинов», в которой мое приложение создает классы, которые реализуют интерфейс во время выполнения, чтобы обеспечить функциональность подключаемых модулей.
Я достигаю этого, используя Activator.CreateInstance во всех классах, которые реализуют указанный интерфейс в сборке плагина.
В настоящее время я использую только одну реализацию класса, и для нее у меня есть два аргумента конструктора, и я включил их в вызов Activator.CreateInstance:
instanceList.Add((Foo)Activator.CreateInstance(_TypeList[typeKey], new object[] { arg1, arg2 }));
Я понимаю, что это может вызвать проблемы позже, если будет добавлена реализация, которая не использует эту сигнатуру конструктора. Какова лучшая ситуация, чтобы справиться с этим.
Явно скажите через документацию, что конструкторы должны использовать эту подпись, а затем заключить ее в try / catch?
Или был бы способ вызвать конструктор класса? учитывая, что мне нужно как-то сопоставить аргументы конструктора.
Или ... избегать аргументов конструктора, помещая аргументы в статический класс как статические свойства?