Я думаю, что MEF будет для вас преимуществом. MEF может быть для плагинов или только для приложений, которые «составлены» во время выполнения.
В вашем случае ваше ядро может искать продукт и создавать его экземпляры во время выполнения. Это означает, что хотя Product по-прежнему нужна ссылка на Core, точке запуска вашего приложения нужна только ссылка на Core, а не Product. Я предполагаю прямо сейчас, что пользователь должен выполнить Product.exe, который затем вызывает Core.dll, чтобы запустить все. Используя MEF, пользователь запускает Core.exe и загружает контракты из Product.dll. Архитектура будет чище.