Остановить модуль Autofac, регистрирующий уже зарегистрированные компоненты

У меня есть модуль 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 переопределение для манипуляций с регистрацией в прошлом, но не похоже, что это полезно в этом сценарии.

Возможно ли это, или мне следует переосмыслить свой дизайн и заставить плагины явно объявлять свои обработчики?

6
задан JRoughan 5 December 2011 в 22:24
поделиться