Я пытаюсь решить, имеет ли смысл предпринять дополнительные усилия для инкапсуляции моего контейнера IoC. Опыт подсказывает мне, что я должен поместить слой инкапсуляции между моими приложениями и любым сторонним компонентом. Я просто не знаю, граничит ли это с чрезмерным убийством.
Я могу вспомнить ситуации, когда я мог бы захотеть переключать контейнеры. Например, мой текущий контейнер перестает обслуживаться, или другой контейнер оказался более легким / производительным и лучше соответствует моим потребностям. Если это произойдет, то мне, возможно, придется много перенастроить.
Чтобы было ясно, я рассматриваю инкапсуляцию регистрации и разрешение типов. Я думаю, что инкапсулировать разрешение не составляет никакого труда - я надеюсь, что обычной практикой будет иметь класс помощника / утилит, делегирующий контейнеру.
EDIT:
Предполагается, что я предпочитаю подключать свои типы программно для обеспечения безопасности типов, проверки во время компиляции и рефакторизации. Это этот код и его зависимость от контейнера, от которого я хочу защитить себя.
Я также использовал контейнер IoC для нескольких других проектов, которые имеют много одинаковых отношений, но работать с контейнером очень сложно, поэтому я хочу изменений. Но изменение означает, что я теряю возможность повторного использования регистрационного кода. Следовательно, почему я рассматриваю инкапсуляцию. Это не огромное бремя, а то, что я, тем не менее, хотел бы смягчить.
Я ищу:
- Минимизировать влияние изменений в контейнерах / версиях контейнеров
- Обеспечение некоторого уровня согласованности регистрации типов между проектами, которые могут использовать разные контейнеры
- Предоставьте методы интерфейса, которые имеют смысл для меня (RegisterSingleton , а не RegisterType (SomeLifetimeProvider) - на примере Unity).
- Дополнить контейнер при изменении условий / требований масштабируемости, например, добавление лучшего кэширования, регистрации и т. д. во время разрешения / регистрации.
- Укажите мою собственную модель для регистрации сопоставлений типов.
- Допустим, я хочу создать группу объектов RegistrationHandler в сборке / пакете, чтобы я мог легко разделить обязанности по регистрации между несколькими классами и автоматически выбирать эти обработчики, не изменяя код где-либо еще.
Я понимаю, что это немного субъективно, поэтому плюсы и минусы могут быть полезны
Спасибо!