Я хотел бы разработать приложение, которое принимает плагины из сообщества пользователей, подобно тому, как это делает Chrome или Firefox. Это будет веб-приложение, поэтому каждый "экземпляр" приложения для отдельных пользователей будет запускать разные плагины (плагины будут загружаться как отдельные экземпляры, но будут "активны" только для определенных пользователей). Я планирую реализовать приложение в .NET и попытаюсь создать архитектуру для модели плагина.
Вот мои желаемые атрибуты:
- Плагины создаются полностью вне моего основного приложения, как отдельные сборки.
- Плагины запускаются в своей собственной "заблокированной" среде с низким доверием. Возможно, отдельный AppDomain.
- Плагины могут работать только через API, который я предоставляю. Например. Я передам им какой-то фасад в качестве интерфейса, и они могут только называть это, а не звонить на любые другие сборки. У меня не может быть плагинов, которые могут произвольно предпринимать действия на веб-сервере, например. влияют на файловую систему.
- Неудачный сбой в аддине не может повлиять на стабильность основного приложения.
Кажется, что System.AddIn - моя лучшая ставка, но я не понимаю, как заставить загруженные аддины работать только через API, который я предоставляю, и не загружать другие сборки. Предоставляет ли System.AddIn эту функциональность? Кроме того, можно ли использовать System.AddIn с ASP.NET/IIS?
Какие еще параметры у меня есть, кроме System.Addin?