У меня есть модуль Autofac, который имеет следующую (урезанную) логику в переопределении загрузки:
protected override void Load(ContainerBuilder builder)
{
foreach (var componentType in allTypesInAllAvailableAssemblies) // Set elsewhere
{
var handlerInterfaces = componentType.GetInterfaces().Where(i => i.IsClosedTypeOf(typeof(IMessageHandler<>)));
if (handlerInterfaces.Any())
builder.RegisterType(componentType).As(handlerInterfaces);
}
}
Он ищет любой класс, который объявляет себя обработчиком сообщений и регистрирует его против всех интерфейсов IMessageHandler, которые он реализует.
Я хочу не регистрировать компонент, если он уже зарегистрирован. В качестве бонуса было бы идеально, если бы я мог обновить существующую регистрацию, чтобы устранить интерфейс (ы) обработчика сообщений, если это еще не сделано.
В качестве аргумента можно предположить, что этот код будет запускаться после , все другие типы будут зарегистрированы (включая возможные кандидаты в обработчики сообщений) )
Я использовал AttachToCom ponentRegistration
переопределение для манипуляций с регистрацией в прошлом, но не похоже, что это полезно в этом сценарии.
Возможно ли это, или мне следует переосмыслить свой дизайн и заставить плагины явно объявлять свои обработчики?