Как правильно писать &quot;плагинное&quot; приложение?
Посмотрите в сторону MEF и Unity (если говорить про .net), позволят создавать достаточно хорошие расширяемые системы.
Если смотреть с более общей точки зрения, то «плагинабельность» — это достаточно широкая и проработанная тема.
Тут встают вопросы: какая именно плагинабельность вам нужна?

Нужно ли взаимодействие на базе SOA? нужна ли изоляция плагинов в отдельный домен? Можете ли вы обойтись простой структурой подлкючения модулей, или надо использовать шину сообщений? Нужно ли разграничение по уровням доверия и, соответственно, раздельный API?
Также вопрос по поводу инъекции зависимостей — будут ли ваши плагины больше отдельными модулями, или они будут тесно интегрироваться в существующую среду (например плагин переопределяющий нотификацию) и возможно использование DI.

Краткого совета «как писать» здесь быть не может, нужно знать задачу и все нюансы.
Если говорить просто о каком-либо фреймворке для обеспечения плагинабельности — почитайте статьи про MEF, они на английском, но дадут общее представление об одном из возможных путей решения проблемы.
А посмотрите API и доки любого подобного и 90% вопросов отпадут сами собой.