Revisión:
Normalmente, un objeto instanciado es una instanciación de una clase con la nueva palabra clave
C# crea dinámicamente una instancia de una clase en la fábrica de clases usando los siguientes métodos:
Activator.CreateInstance (Tipo) Activator.CreateInstance (Tipo, Objeto[])
Primero, definimos una interfaz ITest de la siguiente manera:
Definamos dos clases de implementación, a saber: TestA y TestB, y el código es el siguiente:
donde TestB tiene un constructor no vacío
El método GetUserName en la clase TestB necesita leer el archivo de configuración a través de IConfiguration y luego unirlo con los parámetros entrantes para devolver el valor de retorno.
El archivo de configuración es el siguiente:
Creamos objetos cargando dinámicamente la DLL, creándolos por reflexión e instanciandolos a través de Activator y ActivatorUtilities respectivamente, con el siguiente código:
Resultados de los resultados:
ret "Hola itsvse.com" Por ejemplo. Mensaje "No se define ningún constructor sin parámetros para el tipo 'ClassLibrary1.TestB'."
ret "Hola itsvse.com" ret "Aaaa itsvse.com" Al usar Activator para crear un objeto TestB, se reporta un error:No se define ningún constructor sin parámetros para el tipo 'ClassLibrary1.TestB'.
Crear TestA y TestB a través de ActivatorUtilities no reportará un error, y el método puede ejecutarse normalmente, como se muestra a continuación:
No hay problema en usar Activator para instanciar objetos en el framework .NET, pero en asp.net núcleo se introducen los conceptos de IOC y DI, y muchos objetos no son constructores sin parámetros y deben pasarse en la clase de implementación correspondiente.
Donde _services variables estáticas se definen de la siguiente manera:
CreateInstance(IServiceProvider, Type, Object[])
parámetro
Proveedor IServiceProvider Proveedor de servicios para resolver dependencias
TypeinstanceType Tipo El tipo a activar
Parámetros Objeto[]
Parámetros del constructor que no son proporcionados por el proveedor。
Referencia:El inicio de sesión del hipervínculo es visible.
(Fin)
|