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: 20665|Respuesta: 0

[.NET Core] ASP.NET Core inyecta NullReferenceException con el atributo Autofac

[Copiar enlace]
Publicado el 2020-9-12 20:57:21 | | | |
Autofac es una pasada. Contenedores NET IoC. Gestiona las dependencias entre clases, de modo que la aplicación pueda modificarse fácilmente a medida que aumentan la escala y la complejidad. Se implementa tratando las clases .NET regulares como componentes.
También soy un cliché con los contenedores de Autofac, y he escrito muchos artículos:

Utiliza autofac en MVC para implementar el registro automático
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Error de dependencia circular detectada" resuelto
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core utiliza Autofac para implementar la inyección de IOC
https://www.itsvse.com/thread-7563-1-1.html

El alcance de instancia del componente autofac
https://www.itsvse.com/thread-5080-1-1.html

Atributo Autofac del controlador mvc inyectado en el controlador
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core Dependency Injection utiliza el contenedor IOC que viene con ella
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core utiliza Autofac para implementar la inyección de IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core utiliza Autofac para implementar la intercepción AOP
https://www.itsvse.com/thread-7566-1-1.html


Crear un nuevo proyecto ASP.NET Core 3.1 y referenciar paquetes relacionados con autofacs a través de Nuget, de la siguiente manera:


Vamos a crear una nueva interfaz e implementación de ITest, el código es el siguiente:




Crea un nuevo controlador de clase base BaseController, y otros controladores heredan la clase abstracta, añade la propiedad ITest a la clase base, y el código es el siguiente:

Dejemos que el WeatherForecastController herede de la clase abstracta BaseControler, añadiendo el siguiente método de prueba:

El método ConfigureContainer en la clase Startup registra la interfaz y establece la entrada del atributo controlador, cuyo código es el siguiente:

Intenta visitar:El inicio de sesión del hipervínculo es visible.

La excepción NullReferenceException se cita en el mensaje en blanco, como se muestra en la siguiente figura:



NullReferenceException: Object reference not set to an instance of an object.


PasoEl constructor se inyecta en la interfaz ITest, se llama a su método, la prueba pasa y puede llamarse normalmente

Causas de anomalías

La implementación del Controller es más especial, el Controller no resuelve ni activa por defecto a través de su propio contenedor, está gestionado por el propio MVC, pero Microsoft proporciona este método:

Puedes hacer que el Controlador use su propio contenedor llamando al método AddControllersAsServices(), cuyo código fuente principal es el siguiente:



El método ConfigureServices en el objeto de inicio por defecto se configura de la siguiente manera:

Lo modificamos para:

O:

El código fuente de ServiceBasedControllerActivator es el siguiente:

Una vez configurado, carga el controlador directamente desde el contenedor DI, el controlador analizará el servicio desde Autofac, y la inyección de propiedades configurada entrará en vigor. Como se muestra a continuación:



Finalmente, se adjunta la dirección del código fuente de asp.net núcleo:

El inicio de sesión del hipervínculo es visible.

(Fin)





Anterior:Hangfire añade datos normalmente, pero sigue ejecutándose debido a la excepción
Próximo:¿Cómo mostrar datos de Sqlite en tablas avanzadas con E4A?
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