2009-03-23 18 views
7

Ho una classe che desidero avere accesso al mio contenitore IOC (Windsor), tuttavia non voglio mantenere una proprietà IWindsorContainer statica in giro - preferirei avere il contenitore iniettarsi nelle classi che richiedono un IWindsorContainer come dipendenza del costruttore.IWindsorContainer come parametro di una classe

L'ho estratto con Unity, ma quando provo la stessa cosa con il contenitore Windsor mi dice che IWindsorContainer non è registrato con il contenitore.

Non penso di poter registrare solo IWindsorContainer => WindsorContainer, perché ciò farà sì che il contenitore crei una nuova (o diversa) istanza di se stesso per passare alla mia classe, e quell'istanza non avrà tutto il mio altri tipi registrati con esso. Inoltre non vedo un modo per costruire il contenitore, registrare tutti i tipi in esso e quindi registrare quell'istanza di se stesso contro IWindsorContainer - tutti i metodi di registrazione prendono solo tipi per il servizio e l'implementazione - mai un'istanza concreta effettiva.

risposta

8

In genere non si desidera iniettare il contenitore nei componenti dell'applicazione.

Vedi queste domande (questa domanda è quasi un duplicato di essi):

BTW: si ottiene IKernel iniezione per libero, e tu can registro IWindsorContainer:

container.Register(Component.For<IWindsorContainer>().Instance(container)); 
+0

IKernal ha funzionato per me. Non avevo bisogno dell'intero WindsorContainer per la mia classe. – DavGarcia

1

In generale, come ha detto mausch, pensateci due volte prima di passare il vostro contenitore al componente. Lo in realtà è necessario che l' abbia accesso al contenitore?

Per tirare le dipendenze dal contenitore utilizzare typed factories.

0

Sono stato tentato di farlo di recente. Volevo essere in grado di creare più istanze di un servizio durante la vita di un oggetto. Registrare una fabbrica sarebbe meglio in quanto la necessità della dipendenza è più chiara. Ma creare una fabbrica per servizio sembrava un dolore.

Ho finito per utilizzare qualcosa di simile al codice in questo articolo: http://mikehadlow.blogspot.com/2010/01/10-advanced-windsor-tricks-1a-delegate.html. Supponiamo di avere una classe che ha bisogno di creare istanze di IService. L'articolo descrive una tecnica che consente alla classe di avere una dipendenza da Func, e automaticamente otterrai una factory specifica per quella classe.

Problemi correlati