2011-10-13 11 views
5

Sto costruendo un plug-in per un'applicazione di terze parti e il mio plug-in utilizza Autofac per cablare vari componenti. Il contenitore viene creato all'avvio dell'applicazione, ma l'applicazione host richiama i miei comandi in un secondo momento.I componenti possono essere registrati temporaneamente in un container Autofac?

Quando viene richiamato un comando, l'applicazione host fornisce alcune istanze di tipi che definisce e che i miei componenti dovranno utilizzare. Mi piacerebbe registrare queste istanze nel contenitore in modo che possa occuparsi del cablaggio dei componenti che dipendono da queste istanze.

Sono consapevole che posso utilizzare un ContainerBuilder per aggiornare un contenitore esistente, ma vorrei rimuovere queste registrazioni quando il comando è stato completato poiché queste istanze non saranno più valide. È possibile?

Forse un approccio migliore consiste nell'utilizzare 2 contenitori ... Il comando potrebbe creare un nuovo contenitore per registrare queste istanze e altri componenti potrebbero essere risolti dal contenitore dell'ambito dell'applicazione.

Come è possibile collegare i 2 contenitori in modo che le chiamate di risposta vengano visualizzate fino al contenitore ambito dell'applicazione?

Ci sono dei trucchi da conoscere con questo approccio? Immagino che ci possono essere problemi di durata dei componenti ...

Edit: Ora ho fatto un po 'più di ricerca e sperimentazione e e si scopre posso solo usare il BeginLifetimeScope (Azione <ContainerBuilder>) sovraccarico di registrarsi l'applicazione host ha fornito istanze solo per la durata nidificata. Per qualche ragione ho pensato che aggiungere registrazioni alla durata nidificata avrebbe comportato la loro aggiunta al root container, ma non sembra essere il caso.

+0

Sì, un LifetimeScope è esattamente quello che vuoi in questo caso. Invia una risposta alla tua domanda e contrassegnala come accettata, in modo che le persone che trovano questa domanda in seguito ottengano anche la risposta. –

+0

Grazie, ho provato a postare la mia risposta prima ma SO ha detto che dovevo aspettare 8 ore perché non ho ancora abbastanza punti reputazione ... –

+0

Yay! Ora posso pubblicare la mia risposta ma non posso accettarla fino a domani ... –

risposta

3

Come notato nella mia modifica sopra, risulta che BeginLifetimeScope (Action <ContainerBuilder>) è esattamente ciò di cui ho bisogno. Per qualche ragione ho pensato che l'aggiunta di registrazioni alla durata nidificata avrebbe comportato la loro aggiunta al contenitore radice e quindi la risoluzione dopo la scadenza dell'ambito di durata nidificata, ma non sembra essere il caso.

Problemi correlati