海外免费网站推广,嘉兴营销型网站建设,wordpress 怎么查看蜘蛛,网站快速排名互点软件提到依赖不得不提到#xff0c;控制反转#xff08;Inversion of Control,IOC#xff09;这个概念#xff0c;简单的来讲就是将控制对象的权限交给框架#xff0c;不再手动完成。IOC实现方式有2种#xff1a;
1、服务定位器#xff08;ServiceLocator#xff09;,主动…提到依赖不得不提到控制反转Inversion of Control,IOC这个概念简单的来讲就是将控制对象的权限交给框架不再手动完成。IOC实现方式有2种
1、服务定位器ServiceLocator,主动获取对象
2、依赖注入Dependency Injection,DI在使用的地方申明对象由框架自动赋值。
DI好处简化模块的组装过程降低模块之间的耦合度。
---------------------------------------------------------------------------------------------------------------------------------DI常见概念
1、服务Service:对象
2、注册服务
3、服务容器负责管理注册的服务
4、查询服务创建对象及关联对象
---------------------------------------------------------------------------------------------------------------------------------根据类型获取和注册服务需要分别指定服务类型(service type)和实现类型implementation type,服务类型推荐用接口可以是接口、类实现类型只能用类。
.Net 控制反转组件取名为DependecyInjection也包含ServiceLocator功能
public inteface iTest{
}
public class Test:iTest{
}
---------------------------------------------------------------------------------------------------------------------------------【怎么使用】
1、Nuget 安装 Microsoft.Extensions.DependencyInjection
2、using Microsoft.Extensions.DependencyInjection
ServiceCollection services new ServiceCollection();//定义一个承放服务的集合services.AddTransientGetRole();//添加一个瞬态的服务
using (ServiceProvider serviceProvider services.BuildServiceProvider())
{//ServiceProvider 相当于服务定位器GetRole service serviceProvider.GetServiceGetRole();service.Name test;service.GetName();}
---------------------------------------------------------------------------------------------------------------------------------
对象生命周期Transient(瞬态)Scoped(范围)、Singleton(单例)
1、Transient添加一个瞬态的服务 每次申明服务时会创建新的对象。
ServiceCollection services new ServiceCollection();//定义一个承放服务的集合
services.AddTransientGetRole();//添加一个瞬态的服务 每次申明服务时会创建新的对象using (ServiceProvider serviceProvider services.BuildServiceProvider())
{ GetRole service serviceProvider.GetServiceGetRole();service.Name test;service.GetName();GetRole service1 serviceProvider.GetServiceGetRole();service1.Name test2;service1.GetName();//结果serviceservice1
}
2、Singleton,添加一个单例的服务 每次申明服务时会指向同一对象。
3、Scope添加一个范围的服务 范围内的申明的服务会指向同一对象
注:如果申明的Singleton,在Scope范围申明的服务视为Singleton的情况。
ServiceCollection services new ServiceCollection();//定义一个承放服务的集合services.AddScopedGetRole();using (ServiceProvider serviceProvider services.BuildServiceProvider())
{ //Scope用法using (IServiceScope scope1 serviceProvider.CreateScope()) {GetRole service scope1.ServiceProvider.GetServiceGetRole();service.Name test;service.GetName();GetRole service2 scope1.ServiceProvider.GetServiceGetRole();service1.Name test;service1.GetName();//范围内serviceservice2}using (IServiceScope scope2 serviceProvider.CreateScope()) {GetRole service3 scope2.ServiceProvider.GetServiceGetRole();service.Name test;service.GetName();GetRole service4 scope2.ServiceProvider.GetServiceGetRole();service1.Name test;service1.GetName();}//范围外service2service3
其他知识点Dispose 释放资源
如果服务继承了IDisposable接口在离开Scope范围时会自动调用类的Dispose方法释放资源。