Я нахожусь в процессе разработки расширяемой платформы с использованием DI и IoC. Пользователи должны иметь возможность переопределять существующие функциональные возможности в рамках инфраструктуры, помещая свои собственные реализации в контейнер.
Как я могу разрешить пользователям делать это, не требуя, чтобы они знали, какой контейнер IoC я использую?
Мое текущее промежуточное решение - структурировать мои сборки следующим образом:
1) Определить абстрактные сборки, содержащие только интерфейсы.
2) Определить конкретные сборки, которые реализуют эти интерфейсы. Пользователи могут определять свои собственные для переопределения существующих функций.
3) Определить привязки контейнеров в отдельных сборках; т. е. один переплетный узел на каждый конкретный узел.
Это означает, что бетонные сборки не связаны с конкретным контейнером IoC, и они будут закрыты от изменений, если бы я использовал другой контейнер. Однако пользователям по-прежнему необходимо знать, какой контейнер используется моей платформой для записи сборок привязки, и им нужно будет выпускать новые сборки привязки, если я изменил контейнер IoC (т. Е. С Ninject на Spring).
Я что-то упустил?