Внедрение зависимостей (DI - то, что вы называете IoC) - это немного другое существо, чем поддержка надстроек / подключаемых модулей.
Целью DI является управление зависимостями и уменьшение связи между различными частями системы. Это может выглядеть как надстройки, но немного отличается, потому что вы обычно просто заменяете одну реализацию интерфейса на другую.
С надстройками , с другой стороны, цель состоит в том, чтобы обеспечить ноль, одну или несколько реализаций одной и той же службы .
В обоих случаях вам может потребоваться разрешить реализации во время выполнения на основе файлов конфигурации, сканирования папки или чего-либо подобного, поэтому существует большая степень перекрытия.
Что еще более усложняет то, что надстройки могут иметь самостоятельные зависимости, и вы можете захотеть их поддерживать (переезд на территорию DI).
Для сценария надстройки я поддержу предложение Konamimam: MEF звучит так, как будто оно соответствует вашим требованиям.