W scenariuszu Zamek Windsor chcę sprawdzić, czy mój zbiornik ma pewną usługę zarejestrowany, a nie w zasadzieSprawdź, czy Windsor ma komponent dopasowanie zarejestrowany
if (container.HasComponentFor<IMyService>()) {
// resolve service with container.Resolve<IMyService>()
// then do cool stuff
}
Ale oczywiście container.HasComponentFor<IMyService>()
nie istnieje. Czy istnieje odpowiednik?
to nie wydawać się najlepszym rozwiązaniem. Myślę, że napiszę metodę rozszerzenia na 'IWindsorContainer', aby dopasować składnię, której chciałem =) –
@ TomasLycken Próbowałem tego kawałka kodu, który skutkuje wyjątkiem ' if (Ioc.Container.Kernel.HasComponent (typeof (myInterface)))) { Ioc.Container.Release (Ioc.Container.Resolve()); Ioc.Container.Register (składnik. Dla () .Instance (myObjectInstance) .LifeStyle.Transient); } ' Ale kiedy próbuję zarejestrować komponent wewnątrz instrukcji if, powoduje to błąd, mimo że został już zwolniony. Mówi, że komponent jest już zarejestrowany. Moja wersja zespołu windsor winds to 2.5.1 –
RBT
Release nie usuwa komponentu z kontenera. Jeśli chcesz dodać nowy komponent, który nadpisuje istniejący, po prostu dodaj go za pomocą "IsDefault()", tj. 'If (Ioc.Container.Kernel.HasComponent (typeof (myInterface))) { \t Ioc .Container.Register (Component. For() .Instance (myObjectInstance) .IsDefault(). L ifeStyle.Transient); } ' –