Хорошая архитектура / библиотека для надежного управления плагинами / аддонами

У нас есть приложение, которое, в качестве одного из требований, будет принимать произвольные сторонние плагины, загружать их и запускать их пользовательский интерфейс вместе с нашим собственным приложением. Мы загружали эти сторонние плагины в их собственные домены приложений в целях изоляции, и все работает нормально.

До тех пор, пока один из плагинов не выйдет из строя с необработанным исключением. В этом случае все приложение отключается, хотя все, что действительно затронуто, - это одно из наших «дополнительных» окон инструментов.

В идеале мы хотели бы каким-то образом обработать «необработанное» исключение, выгрузить поврежденный AppDomain, а затем просто перезагрузить его заново. Проблема в том, что мы не можем найти механизм в обработчике событий для необработанного исключения, с помощью которого мы могли бы пометить исключение как «обработанное». Кроме того, поскольку плагины имеют свои собственные компоненты пользовательского интерфейса с собственным набором взаимодействий с пользователем, было бы чрезвычайно сложно «обернуть» наши взаимодействия с плагинами в блоки try / catch / finally.

Существуют ли какие-либо фреймворки / библиотеки / шаблоны программирования, которые позволяют решить эту проблему? Мы отлично умеем делать надстройки; в чем нам нужна помощь, так это в поддержании работоспособности приложения, когда код в другом домене приложения неожиданно дает сбой.

7
задан GWLlosa 7 April 2011 в 13:30
поделиться