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