|
|
Publicado en 14/9/2018 13:22:21
|
|
|
|

El alcance de la instancia determina cómo se comparten los servicios entre solicitudes.
Dirección original:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Una instancia por dependencia
Con esta opción, se devuelve una nueva instancia cada vez que se solicita el servicio. Utiliza InstancePerDependency(). Esta es la opción predeterminada. El código de abajo, líneas 2 y 3, es equivalente.
El siguiente código genera una nueva instancia para cada bucle, para un total de 100 instancias.
Instancia única
Utiliza esta opción para solicitar un servicio en el ámbito raíz o anidado, ambos devuelven la misma instancia. Usa SingleInstance() para especificar.
El código de abajo, w1 y w2 son siempre el mismo objeto, y solo hay una instancia de la clase Worker en 100 bucles.
Una instancia por alcance del ciclo de vida
Utiliza esta opción para solicitar un servicio en un ILifetimeScope específico, devolviendo solo una instancia. Utiliza InstancePerLifetimeScope(). En el siguiente código, los 100 veces w1 en el ámbito 1 son el mismo objeto, y las 100 veces w2 en el ámbito 2 son el mismo objeto, pero w1 y w2 no son el mismo objeto.
Una instancia por rango de ciclo de vida de coincidencia
Similar a [una instancia por alcance de ciclo de vida] anterior, pero con más control. Utiliza esta opción para permitir que el objeto ILifetimeScope reciba una Etiqueta. Solo hay una instancia dentro del rango del combate por parejas. Utiliza el método InstancePerMatchingLifetimeScope().
En el código de abajo, w1 y w2 son lo mismo, w3 y w4 son iguales, pero w1 y w3 son diferentes.
Se debe proporcionar el marcado adecuado al analizar, y el siguiente código lanza una excepción.
Una instancia por solicitud
Algunas aplicaciones tienen semántica de petición de forma natural, como ASP.NET MVC o aplicaciones WebForm. [Una instancia por solicitud] se implementa sobre la base de [una instancia por rango de ciclo de vida coincidente], proporcionando marcadores de alcance, funciones de registro e integración de tipos comunes. Básicamente, [una instancia por rango de ciclo de vida coincidente].
ASP.NET Core utiliza una instancia por alcance de ciclo de vida en lugar de una instancia por petición.
Una instancia por Propiedad
El<T> tipo de asociación implícita Propiedad crea rangos anidados del ciclo de vida. Con el registro por instancia por propiedad, puedes limitar las dependencias a instancias poseídas.
En este caso, el servicio ServiceForHandler está limitado al alcance de la instancia MessageHandler.
Rango de roscas
Autofac puede forzar que los objetos del hilo A no satisfagan las dependencias del hilo B.
Luego que cada uno cree su propio alcance de vida
Importante: En un escenario multihilo, ten cuidado de no limpiar el ámbito padre.De lo contrario, los subscopes en el hilo derivado no podrán resolver el servicio.
Cada hilo tendrá su propia instancia de MyThreadScopedComponent, que es esencialmente un singleton con alcance de ciclo de vida. Las instancias en el ámbito no se proporcionan externamente, por lo que es fácil mantener los componentes aislados entre hilos.
Al añadir el parámetro ILifetimeScope, el rango padre puede inyectarse en el código que genera el hilo, y Autofac inyectará automáticamente el rango actual, que luego podrá usarse para crear ámbitos anidados.
Si quieres controlarlo más, puedes usar [una instancia por rango de ciclo de vida coincidente] para asociar componentes con alcance de hilos con ámbitos internos del ciclo de vida, como se muestra en la figura:
El "Contexto" en el diagrama es el rango de ciclo de vida creado por el método BeginLifetimeScope.
|
Anterior:Efectos de clic del ratón en la interfaz de la zona: libertad, democracia, prosperidadPróximo:{"error_msg": "Fallido la certificación IAM"}
|