吉林分销网站建设,可信网站认证的区别,网站建设如何投放广告,企业咨询公司有哪些DI#xff08;依赖注入#xff09;#xff1a;DI#xff08;Dependency Injection#xff09;是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器#xff0c;使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入… DI依赖注入DIDependency Injection是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入可以降低代码的耦合度提高代码的重用性和可测试性。 DIP依赖倒置原则DIPDependency Inversion Principle是SOLID设计原则中的一条原则指导了代码的依赖关系设计。它的核心思想是高层模块例如业务逻辑不应该依赖于低层模块例如具体实现类而是应该依赖于抽象接口或抽象类。通过依赖倒置原则可以使得代码更加灵活和可扩展。 IOC控制反转IOCInversion of Control是一种软件设计思想通过将对象的创建和依赖关系的解析交给外部容器来进行管理。在传统的开发中开发者需要手动创建对象并维护对象之间的依赖关系。而IOC则是通过外部容器负责对象的创建和依赖关系的解析将控制权反转给了外部容器。 IOC容器IOC容器是一个负责管理对象的创建和依赖关系的容器。它接收由开发者配置的对象的依赖关系根据配置创建对象并注入依赖关系。IOC容器负责实例化对象并在需要时将其注入到其他对象中。常见的IOC容器有Autofac、Unity、Ninject等。
简而言之DI是一种设计模式DIP是一种设计原则IOC是一种设计思想而IOC容器是实现IOC思想的具体实现工具。使用IOC容器可以将对象的创建和管理交给容器实现松耦合、可测试和可扩展的代码。
这个是Demo的整体架构
using DI.IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DI.Service
{public class CourseService : ICourseService{public CourseService(){Console.WriteLine(${this.GetType().Name}--被构造);}}
}using DI.IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DI.Service
{public class StudentService : IStudentService{private readonly ICourseService _courseService;public StudentService(ICourseService courseService){_courseService courseService;Console.WriteLine(${this.GetType().Name}--被构造);}}
}using Autofac;
using DI.IService;
using DI.Service;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;Console.WriteLine(Hello, World!);// 原始方法
ICourseService courseService new CourseService();
IStudentService studentService new StudentService(courseService);// 内置容器的方法
ServiceCollection serviceDescriptors new ServiceCollection(); // 创建一个容器serviceDescriptors.AddScopedICourseService, CourseService(); // 注册抽象和具体普通类之间的关系
serviceDescriptors.AddScopedIStudentService, StudentService();ServiceProvider serviceProvider serviceDescriptors.BuildServiceProvider();
var studentService1 serviceProvider.GetService(typeof(IStudentService));// Autofac
ContainerBuilder containerBuilder new ContainerBuilder(); // 得到容器的建造者containerBuilder.RegisterTypeCourseService().AsICourseService(); // 配置抽象与具体类之间的关系
containerBuilder.RegisterTypeStudentService().AsIStudentService();IContainer container containerBuilder.Build(); // Build一下得到容器实例
var studentService2 container.ResolveIStudentService();// Autofac -- 注册程序集
ContainerBuilder containerBuilder2 new ContainerBuilder();
Assembly interfaceAssembly Assembly.LoadFrom(DI.IService.dll);
Assembly serviceAssembly Assembly.LoadFrom(DI.Service.dll);
containerBuilder2.RegisterAssemblyTypes(interfaceAssembly, serviceAssembly).AsImplementedInterfaces();
IContainer container1 containerBuilder2.Build();
var studentService3 container1.ResolveIStudentService();输出结果