Автоматическая регистрация по атрибутам для .net
Я сделал простейшую утилиту для регистрации реализаций в контейнере.
Зачем?
В общем, на больших проектах с регистрациями в контейнере иногда можно ошибиться даже при merge. Плюс, если в проектах есть какие-нибудь IChainProcessor-ы в количестве более 5-10 штук - удобнее регистрировать их все через атрибут.
[TypeRegistration(LifetimeManagementType.PerThread)]
internal interface I1
{
public void Action1();
public void Action2();
}
А затем просто вызовите UnityCommonRegistration.Register(container) для регистрации всех реализаций.
Теперь вы можете добавлять реализации, не добавляя их в контейнер вручную.
Для регистрации Mock в Debug конфигурациях можно (и нужно) использовать директивы препроцессора #if.
Так же вы можете переопределить LifetimeManagement для любых реализаций.
[DerivedTypeRegistration(LifetimeManagementType.Singletone)]
internal class C1 : I1
{
public void Action1()
{
var a = 1+2;
}
public void Action2()
{
var b = 3+4;
}
}
Самое смешное, что 2 атрибута обеспечивают практически все возможные типы регистрации в контейнере.
Как пользоваться?
Добавить TypeRegistrationAttribute на базовую сущность, реализации которой хочется регистрировать в контейнере.
Добавить DerivedTypeRegistrationAttribute на реализацию чтобы переопределить LifetimeManagement.
Указать LifetimeManagementType.
Вызвать UnityCommonRegistration.Register(container).
Так же, теперь чтобы вытянуть регистрации из сборки с данными атрибутами достаточно всего-лишь вызвать RegisterFromAnotherAssembly.
Теперь все реализации зарегистрированы в контейнере.
Как добавить свой контейнер?
переопределить 3 метода - registerInContainer, registerManyInContainer.
Написать свой маппинг для LifetimeManagementType.
Заключение
Теперь регистрацию в контейнере не нужно переписывать по 10 раз, достаточно указывать атрибуты.
Для импорта из сборок без атрибутов по прежнему придется использовать сторонние утилиты.
Исходники лежать здесь.
Использованные материалы:
1) https://stablediffusionweb.com - Изображение для публикации