Resolver Icontainer
-
25-09-2019 - |
Pregunta
¿Cuál es el método sugerido para obtener el contenedor AutoFAC desde dentro de una clase en la aplicación? ¿Autofac proporciona resolver una propiedad de Icontainer en una clase o necesito almacenar el contenedor a nivel mundial una vez que la he construido?
Solución
Necesitarás IComponentContext
o ILifetimeScope
Para la mayoría de los propósitos. Autofac proporcionan automáticamente, por lo que todo lo que necesita hacer es tomar una dependencia (constructor) de uno de ellos y se inyectará la instancia actual.
Ambas interfaces proporcionan el estándar Resolve()
operaciones, mientras ILifetimeScope
extender IComponentContext
Al agregar métodos para comenzar nuevas vidas anidadas.
Los componentes que desean usar los servicios del contenedor para acceder a otros componentes deben hacerlo dentro de su propio alcance, en lugar del 'global' IContainer
, para que se pueda devolver la instancia correcta. Por ejemplo, dentro de una solicitud HTTP, el inyectado IComponentContext
o ILifetimeScope
Será el de la solicitud actual.
La mayoría de los problemas que requieren un contexto inyectado también pueden superarse (a menudo más elegantemente) utilizando tipos de relaciones; ver: http://autofac.readthedocs.org/en/latest/resolve/relationships.html.