14

Ho probabilmente una semplice domanda su Castle Windsor, che non uso da molto tempo. Sto cercando di registrare un servizio con un'istanza specifica che sarà l'implementazione singleton del servizio.Specificare l'istanza per la registrazione di un componente con Castle Windsor

Il contenitore non può provare a creare l'implementazione del servizio stesso perché ha dipendenze che il contenitore non sarà in grado di risolvere. Ho un'istanza del servizio e voglio che sia l'unica istanza utilizzata per chiunque richieda il servizio. Ma mi sembra che abbia molta poca fortuna.

ho momentaneamente avevo speranze sollevate utilizzando questo codice:

container.Register(Component.For<IMyInterface>().Instance(serviceObj)); 

Ma tutto Castello fa con l'istanza è fare un .GetType() su di esso e registrare il tipo. Le richieste per il servizio causeranno successivamente al contenitore di provare a creare quel tipo e fallire quando non è in grado di riempire le dipendenze.

Quindi c'è un modo per fare ciò che voglio fare qui? In caso contrario creerò una sorta di IServiceProvider che recupera l'istanza del servizio e non ha alcuna dipendenza per il contenitore da compilare. Ma questo sembra più un lavoro che la soluzione giusta.

Qualche suggerimento? Grazie!

risposta

21

Provare a utilizzare il metodo AddComponentInstance sull'oggetto Kernel del contenitore. Penso che questo sia ciò di cui hai bisogno.


Si prega di notare: Questa tecnica è ora sconsigliato. Utilizzare container.Register(Component.For<T>().Instance(myT)); invece (grazie a eouw0o83hf)

+0

Grazie Gerrie e Bojan! Ha funzionato a meraviglia. –

+8

Come una breve nota, questa tecnica è ora deprecata. Usa 'container.Register (Component.For () .Instance (myT)) ;, invece. – eouw0o83hf

+0

Questo collegamento è anche inattivo ora – Liam

2

È possibile farlo attraverso il Kernel di proprietà del contenitore:

container.Kernel.AddComponentInstance<IMyInterface>(serviceObj); 
Problemi correlati