In uno scenario di Castello di Windsor voglio verificare se il mio contenitore ha un determinato servizio registrato, e fanno fondamentalmenteControllare se Windsor ha una componente di corrispondenza registrata
if (container.HasComponentFor<IMyService>()) {
// resolve service with container.Resolve<IMyService>()
// then do cool stuff
}
ma, naturalmente, container.HasComponentFor<IMyService>()
non esiste. C'è un equivalente?
Questo sembra come l'opzione migliore. Penso che scriverò un metodo di estensione su 'IWindsorContainer' per far corrispondere la sintassi che volevo =) –
@TomasLycken Stavo provando questo pezzo di codice che risulta nell'eccezione ' if (Ioc.Container.Kernel.HasComponent (typeof (myInterface))) { Ioc.Container.Release (Ioc.Container.Resolve()); Ioc.Container.Register (Component.For (). Instance (myObjectInstance) .LifeStyle.Transient); } ' Ma quando provo a registrare il componente all'interno dell'istruzione if, esso genera un errore anche se era già stato rilasciato. Dice che il componente è già registrato. La versione del mio windsor del castello è 2.5.1 –
RBT
Release non rimuove il componente dal container. Se è necessario aggiungere un nuovo componente che sovrascrive quello esistente, è sufficiente aggiungerlo con "IsDefault()", ovvero "if (Ioc.Container.Kernel.HasComponent (typeof (myInterface))) { \t Ioc .Container.Register (Component.For(). Instance (myObjectInstance) .IsDefault(). L ifeStyle.Transient); } ' –