Я думаю, что ответ зависит от того, как части (с использованием терминологии MEF) используются внутри приложения. Я бы создал и заполнил контейнеры в зависимости от того, где/как используются детали.
Пример:
При создании частей, которые содержат представления для GUI я думаю, что GUI слой в приложении будет загружать их и управлять ими контейнер.
У меня есть фреймворк приложения, который я создал для подключаемых модулей клиентского приложения, и в нем есть статический класс диспетчера приложений, который загружает компоненты для приложения, но затем я также загружаю детали в контейнер, который используется моим ядром логика. Цель этих двух полностью отлична, потому что некоторые из них являются основными понятиями, которые я хотел бы легко поменять позже, а некоторые из них - плагины пользовательского интерфейса, которые расширяют функциональность клиента, когда они удаляются и доступны для приложения.
Кроме того, они загружаются с использованием разных подходов ... ядро запускается только при использовании определенных правил, а другое загружает все из каталога (плагинов).