2011-05-30 19 views
14

Al debatir acerca de Autofac con un colega, surgió el problema del registro de dependencias en tiempo de ejecución. En Prism, por ejemplo, los ensamblados se cargan frecuentemente en el tiempo de ejecución y sus dependencias se registran en el contenedor IoC (generalmente Unity).Registro en tiempo de ejecución con Autofac

¿Cómo se puede lograr esto con Autofac?

Según la documentación de Autofac y lo que he encontrado en la web, parece que el registro se realiza al inicio de la aplicación. Incluso cuando se utilizan ensamblajes "externos", los registros se ubican en módulos con los ensamblajes al inicio de la aplicación. ¿Cómo hacemos esto después de que el contenedor se "construye" al inicio de la aplicación?

(Tenga en cuenta que el conjunto puede querer agregar dependencias para el uso de otros componentes en la aplicación, por lo que un contenedor anidado no puede resolver el problema aquí. Relacionado con este tema: Unity tiene métodos como RegisterIfExists y similares . ¿Hay equivalentes de Autofac?)

¡Gracias!

+0

posible duplicado de [Autofac, agregar servicios después de que se haya construido el contenedor] (http://stackoverflow.com/questions/4998870/autofac-adding-services-after-container-has-been-built) –

Respuesta

29

actualizar un Autofac Contenedor existente: Puede actualizar una existente Autofac Container en tiempo de ejecución mediante el uso de ContainerBuilder.Update(). El siguiente ejemplo de código, tomado de la entrada del blog Autofac 2.2 Released, demuestra el uso:

var container = // something already built 

var updater = new ContainerBuilder(); 
updater.RegisterType<A>(); 
updater.Register(c => new B()).As<IB>(); 

// Add the registrations to the container 
updater.Update(container); 

Autofac y Prisma Integración: La pregunta Whats the status of Prism integration in Autofac? también puede ser útil para usted.

+0

¿Sabe usted? si es posible hacer esto usando tipos de un ensamblaje cargado dinámicamente? Es decir, uso 'Assembly.LoadFrom()' y luego actualizo el contenedor con los tipos recién descubiertos? –

+0

Una de las sobrecargas 'RegisterType' toma una instancia' Type', por lo que si tienes eso, deberías estar listo. – bentayloruk

+0

El comando 'Update()' puede usarse solo una vez. Esto no es eficiente para el registro en tiempo de ejecución. Necesito registrar nuevos tipos después de la operación '.Build()' si es posible ... –

Cuestiones relacionadas