Мы делаем CMS, и хотим сделать возможность плагинов для неё. Например: есть статья, и плагин с помощью которого к статье можно ставить лайки. Так вот, как организовать плагинность проекта.
Я понимаю как я могу делать встраивание плагина в действие+вьюшку. Можно сделать так:
У плагина есть функция, например AddLikestToArticle
У неё аттрибут [PluginModule(ToAction: "ActionName", ToController: "ControllerName")]
Далее при подключении плагина, все функции с данным атрибутом регистрируются в системе.
В момент вызова дейтсивя ActionName после того как оно уже веруно HTML результатя парсю в HTML DOM этот результат и вызываю AddLikestToArticle применяю его к полученному результату.
Но как сделать плагин к классам, и в особенности к классам которые хранятся в базе данных черезе EF. Плагин может расширять классы (добавлять столбы в таблицы), или даже добавлять новые классы. Как быть с DbContext, как его расширять плагином?
Меня интересуют все подходы которые могут быть. Есть ли какие-то готовые системы для плагинности/модульности?
Как пока я думаю это можно сделать. Расширять классы через наследование. При этом у каждого модуля может быть свой класс наследник. Остаётся вопрос как теперь собрать (максимально широкий) DbContext. Я думаю можно собрать этот файл через код, то есть собрать его код автоматически и потом на-лету скомпилировать, и через IoC использовать именно его.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей