tengo un módulo Autofac que tiene la lógica siguiente (recortada) en la anulación de la carga:módulo de parada Autofac registro ya registrados
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);
}
}
Esto está en busca de cualquier clase que sí declara un controlador de mensajes y lo registra contra todas las interfaces IMessageHandler que implementa.
Lo que quiero hacer es no registrar el componente si ya está registrado. Como beneficio adicional, sería ideal si pudiera actualizar el registro existente para resolverlo frente a la (s) interfaz (es) del manejador de mensajes, si aún no lo está.
Por el bien del argumento se puede suponer que este código se ejecutará después de todos los demás tipos se han registrado (incluyendo posibles candidatos controlador de mensajes)
He usado la anulación AttachToComponentRegistration
para la manipulación de la inscripción en el pasado, pero no parece que sea útil en este escenario.
¿Es posible o debería replantear mi diseño y forzar los complementos para declarar explícitamente sus controladores?
¿Ha intentado utilizar la clase AnyConcreteTypeNotAlreadyRegisteredSource?Ver: http://stackoverflow.com/questions/3413660/ –