ho un modulo Autofac che ha la seguente (assettato giù) della logica nella esclusione di carico:arresto Autofac modulo registrazione già registrati
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);
}
}
Questo è alla ricerca di qualsiasi classe che si dichiara un gestore di messaggi e lo registra contro tutte le interfacce IMessageHandler che implementa.
Quello che voglio fare è non registrare il componente se è già registrato. Come bonus, sarebbe l'ideale se potessi aggiornare la registrazione esistente per risolverlo con le interfacce del gestore dei messaggi se non lo è già.
Per amor di discussione si può presumere che questo codice verrà eseguito dopo tutti gli altri tipi sono stati registrati (inclusi i possibili candidati gestore di messaggi)
Ho usato l'override AttachToComponentRegistration
per la manipolazione iscrizione nel passato ma non sembra che sia utile in questo scenario.
È possibile o devo riconsiderare il design e forzare i plug-in per dichiarare esplicitamente i gestori?
Hai provato a utilizzare la classe AnyConcreteTypeNotAlreadyRegisteredSource?Vedi: http://stackoverflow.com/questions/3413660/ –