В общем, начав писать рисование в своем crud-генераторе заметил, что опять написал класс, регистрирующий все в контейнере по атрибутам.

Решил сделать отдельный проект. Добавил регистрацию множеств реализаций, или конкретных реализаций с управлением LifetimeManagement-ом (для Unity).

Зачем?

В общем, на больших проектах с регистрациями в контейнере иногда можно ошибиться даже при merge. Плюс, если в проектах есть какие-нибудь IChainProcessor-ы в количестве более 5-10 штук - удобнее регистрировать их все через атрибут.

Похожий тип регистрации используется в asp net (для наследников Controller). Просто добавляешь реализации интерфейсов, они регистрируются в контейнере.

Как пользоваться?

Добавить TypeRegistrationAttribute на базовую сущность, реализации которой хочется регистрировать в контейнере.

Добавить DerivedTypeRegistrationAttribute на реализацию чтобы переопределить LifetimeManagement.

Указать LifetimeManagementType.

Вызвать UnityCommonRegistration.Register(container).

Теперь все реализации зарегистрированы в контейнере.

Как добавить свой контейнер?

переопределить 2 метода - registerInContainer, registerManyInContainer.

Написать свой маппинг для LifetimeManagementType.

Где взять?

Здесь

Комментарии (55)