IoC: aplicación simple de la unidad

¿Qué es Unity?
Unity es un contenedor de inyección de dependencia ligero y extensible desarrollado por el equipo de patrones y prácticas.

Características de Unity
1. Proporciona un mecanismo para crear (o ensamblar) instancias de objetos, y estas instancias de objetos también pueden contener otras instancias de objetos dependientes.

2. Unity permite inyectar objetos preconfigurados en la clase para lograr la función de inversión de control (Ioc). En Unity, se admiten la inyección del constructor, la inyección del establecedor de propiedades y la inyección de llamadas a métodos.

3. La arquitectura que soporta el contenedor. Un contenedor puede tener contenedores secundarios, lo que permite consultas de posicionamiento de objetos desde el contenedor secundario al contenedor principal.

4. El contenedor se puede preparar y configurar a través del archivo de configuración.

5. No afectará la definición de la clase (excepto la inyección de valor de establecimiento de propiedad y la inyección de método), que también es una manifestación de contenedores livianos.

6. Soporte de extensión de contenedor personalizado.

Práctica de Unity
Crea un nuevo programa de consola, y Nuget instala Unity y
Inserte la descripción de la imagen aquí
escribe la clase primero

/// <summary>
	/// 班级接口
	/// </summary>
	public interface IClass
	{
    
    
		string ClassName {
    
     get; set; }

		void ShowInfo();
	}
	/// <summary>
	/// 计科班
	/// </summary>
	public class CbClass : IClass
	{
    
    
		public string ClassName {
    
     get; set; }

		public void ShowInfo()
		{
    
    
			Console.WriteLine("计科班:{0}", ClassName);
		}
	}
	/// <summary>
	/// 电商班
	/// </summary>
	public class EcClass : IClass
	{
    
    
		public string ClassName {
    
     get; set; }

		public void ShowInfo()
		{
    
    
			Console.WriteLine("电商班:{0}", ClassName);
		}
	}

Generalmente al inicializar una instancia como esta

CbClass cbclass = new CbClass();

Utilice el principio de inversión de dependencia

IClass class = new CbClass();

Vuelva a construir un paquete de fábrica simple

var class = Factory.CreateClass();

Pero una vez que hay más clases, tienes que modificar la fábrica cada vez que agregas clases, lo que se vuelve muy complicado, aquí usamos la inyección de dependencias para solucionar este problema.

public static void ContainerCodeTest1()
{
    
    
    IUnityContainer container = new UnityContainer();
    
    //默认注册(无命名),如果后面还有默认注册会覆盖前面的
    container.RegisterType<IClass, CbClass>();
  
    //命名注册
    container.RegisterType<IClass, EcClass>("ec");

    //解析默认对象
    IClass cbClass = container.Resolve<IClass>();
    cbClass.ShowInfo();

    //指定命名解析对象
    IClass ecClass = container.Resolve<IClass>("ec");           
    ecClass.ShowInfo();

    //获取容器中所有IClass的注册的已命名对象
    IEnumerable<IClass> classList = container.ResolveAll<IClass>();
    foreach (var item in classList)
    {
    
    
        item.ShowInfo();
    }
}

Supongo que te gusta

Origin blog.csdn.net/dingmengwei/article/details/114205021
Recomendado
Clasificación