В общем, начав писать рисование в своем crud-генераторе заметил, что опять написал класс, регистрирующий все в контейнере по атрибутам.
Решил сделать отдельный проект. Добавил регистрацию множеств реализаций, или конкретных реализаций с управлением LifetimeManagement-ом (для Unity).
Зачем?
В общем, на больших проектах с регистрациями в контейнере иногда можно ошибиться даже при merge. Плюс, если в проектах есть какие-нибудь IChainProcessor-ы в количестве более 5-10 штук - удобнее регистрировать их все через атрибут.
Похожий тип регистрации используется в asp net (для наследников Controller). Просто добавляешь реализации интерфейсов, они регистрируются в контейнере.
Как пользоваться?
Добавить TypeRegistrationAttribute на базовую сущность, реализации которой хочется регистрировать в контейнере.
Добавить DerivedTypeRegistrationAttribute на реализацию чтобы переопределить LifetimeManagement.
Указать LifetimeManagementType.
Вызвать UnityCommonRegistration.Register(container).
Теперь все реализации зарегистрированы в контейнере.
Как добавить свой контейнер?
переопределить 2 метода - registerInContainer, registerManyInContainer.
Написать свой маппинг для LifetimeManagementType.