Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 20252|Respuesta: 1

[Fuente] El alcance de instancia del componente autofac

[Copiar enlace]
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, prosperidad
Próximo:{&quot;error_msg&quot;: &quot;Fallido la certificación IAM&quot;}
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com