Mam moduł Autofac który ma następujący (okrojone) logikę w ręcznym obciążenie:Zatrzymaj Autofac moduł Załatwienie już zarejestrowane komponenty
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);
}
}
Ten szuka jakiejkolwiek klasy, która deklaruje się do obsługi wiadomości i rejestruje go przeciwko wszystkim interfejsom IMessageHandler, które implementuje.
Co chcę zrobić, to nie zarejestrować komponentu, jeśli jest już zarejestrowany. Jako bonus, byłoby idealne, gdybym mógł zaktualizować istniejącą rejestrację, aby rozwiązać problemy z interfejsem komunikatora, jeśli jeszcze nie jest.
Dla argumentu można przyjąć, że ten kod będzie działał po wszystkie inne typy zostały zarejestrowane (w tym ewentualnych kandydatów obsługi komunikatów)
Użyłem AttachToComponentRegistration
nadpisanie manipulacji rejestracji w przeszłości, ale nie wygląda na użyteczny w tym scenariuszu.
Czy jest to możliwe, czy powinienem ponownie przemyśleć mój projekt i wymusić wtyczki, aby jawnie zadeklarować ich obsługę?
Czy próbowałeś użyć klasy AnyConcreteTypeNotAlreadyRegisteredSource?Zobacz: http://stackoverflow.com/questions/3413660/ –