2011-10-13 13 views
5

Estoy creando un complemento para una aplicación de terceros y mi complemento utiliza Autofac para conectar varios componentes. El contenedor se genera al inicio de la aplicación, pero la aplicación host invoca mis comandos más adelante.¿Se pueden registrar temporalmente los componentes en un contenedor Autofac?

Cuando se invoca un comando, la aplicación host proporciona algunas instancias de los tipos que define y que necesitarán usar mis componentes. Me gustaría registrar estas instancias en el contenedor para que pueda encargarse de cablear los componentes que dependen de estas instancias.

Soy consciente de que puedo usar un ContainerBuilder para actualizar un contenedor existente, pero me gustaría eliminar estos registros cuando el comando se haya completado ya que estas instancias ya no serán válidas. es posible?

Tal vez un mejor enfoque es usar 2 contenedores ... El comando podría crear un nuevo contenedor para registrar estas instancias y otros componentes podrían resolverse desde el contenedor del ámbito de la aplicación.

¿Cómo podría conectar los 2 contenedores para que las llamadas de resolución salten al contenedor de la aplicación?

¿Hay algún inconveniente que tener en cuenta con este enfoque? Me imagino que puede haber problemas de toda la vida de componentes ...

Editar: Ahora he hecho un poco más investigación y pruebas y y resulta que sólo puedo utilizar el BeginLifetimeScope (Acción <ContainerBuilder>) sobrecargue registrar la aplicación host proporcionó instancias solo para la vida anidada. Por alguna razón, pensé que agregar registros a la vida anidada daría como resultado que se agregaran al contenedor raíz, pero ese no parece ser el caso.

+0

Sí, un LifetimeScope es exactamente lo que desea en este caso. Publique una respuesta a su pregunta y márquela como aceptada para que las personas que encuentren esta pregunta obtengan la respuesta también. –

+0

Gracias, traté de publicar mi respuesta antes, pero SO dijo que tenía que esperar 8 horas porque aún no tengo suficientes puntos de reputación ... –

+0

¡Yay! Ahora puedo publicar mi respuesta, pero no puedo aceptarla hasta mañana ... –

Respuesta

3

Como mencioné en mi edición anterior, resulta que BeginLifetimeScope (Acción <ContainerBuilder>) es exactamente lo que necesito. Por alguna razón, pensé que agregar registros a la vida anidada resultaría en que se agreguen al contenedor raíz y, por lo tanto, puedan resolverse después de que termine el alcance de vida anidado, pero ese no parece ser el caso.

Cuestiones relacionadas