Dla obecnych versons z Autofac: (2.0+, więc coś, co powinno być przy użyciu dzisiaj)
zarejestrować wiele ILoggers
(na przykład):
var builder = new ContainerBuilder();
builder.Register<ConsoleLogger>()
.As<ILogger>();
builder.Register<EmailLogger>()
.As<ILogger>()
.PreserveExistingDefaults(); //keeps console logger as the default
Następnie dostać wszystkie ILogger
s:
var loggers = container.Resolve<IEnumerable<ILogger>>();
Nie musisz robić nic specjalnego, po prostu zapytaj o IEnumerable<T>
pożądanego typu. Autofac oferuje wsparcie w zakresie zbierania po wyjęciu z pudełka, wraz z innymi adapters, które mogą owijać twoje komponenty dodatkową funkcjonalnością. .
To samo użycie jako ImplicitCollectionSupportModule pre-2.x, ale upieczone tuż
Dla starszych wersji (0.x - 1,4)
dwa sposoby:
1) Za pomocą rejestracji zbiórki
var builder = new ContainerBuilder();
builder.RegisterCollection<ILogger>()
.As<IEnumerable<ILogger>>();
builder.Register<ConsoleLogger>()
.As<ILogger>()
.MemberOf<IEnumerable<ILogger>>();
builder.Register<EmailLogger>()
.As<ILogger>()
.MemberOf<IEnumerable<ILogger>>();
wówczas:
var loggers = container.Resolve<IEnumerable<ILogger>>();
co daje niezliczoną liczbę.
lub 2) Można użyć modułu ImplicitCollectionSupport, które uczynią pracę kodu jak nowsze wersje Autofac:
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register(component1).As<ILogger>;
builder.Register(component2).As<ILogger>;
Następnie rozwiązać zbiór ILogger zamiast szuka rozwiązania wszystkich.
var loggers = container.Resolve<IEnumerable<ILogger>>();
który daje ponownie niezliczoną liczbę.
Każdy powód, dla którego chcesz się podzielić, dlaczego przenosisz się z Windsor do Autofac? –
Rzeczą, która bardzo podoba mi się w Autofac jest możliwość wyrażenia dynamicznej konstrukcji komponentów za pomocą wyrażeń lamda.Używając wyrażeń w przeciwieństwie do autowirowania, jest mniej miejsca na niezrozumienie tego, co kontener "robi", kiedy rozwiązuje typ (uwaga: autofac obsługuje autowiring, jeśli wolisz). W końcu interfejs API Windsor stał się tak wielki, że w każdym przypadku stwarza wrażenie złożoności, kiedy IOC jako koncepcja jest całkiem prosta. Nie mówiąc, że nigdy więcej nie użyję Windsora, tylko wypróbuję inne opcje. – crowleym
Rozważałem przejście z Windsor do Autofac. Interfejs API Windsora jest mylący. – Amy