net中核心的注入模式有哪些

  介绍

这期内容当中小编将会给大家带来有关。net中核心的注入模式有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>服务生存期: ASP。网络核心提供了一个内置的服务容器IServiceProvider负责管理服务的生命周期,从被依赖注入容器创建开始(就是将服务注入到你要使用的类的构造函数中),然后框架负责创建依赖关系的实例,并在不再需要时对其进行处理(就是说等我们调用完服务时,容器会自己去对注入的服务进行释放)。

IServiceProvider怎么负责的呢?

//, System.IServiceProvider   using 系统;      public  interface  IServiceProvider   {   ,object  GetService (Type  serviceType);   }

可以看出是通过GetService此接口的方法获取提供服务的对象。那再走深一点找找,我们看看程序集Microsoft.Extensions。DependencyInjection是怎么提供这个容器的

//Microsoft.Extensions.DependencyInjection.IServiceProviderFactory   using  Microsoft.Extensions.DependencyInjection;   using 系统;      public  interface  IServiceProviderFactory   {   ,TContainerBuilder  CreateBuilder (IServiceCollection 服务);      ,IServiceProvider  CreateServiceProvider (TContainerBuilder  containerBuilder);   }

看到上面的IServiceProviderFactory接口是不是很熟悉了,这个容器里会有一个IServiceCollection(服务集合),那服务怎么加进入(实现)的呢

//Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions   using 系统;      private  static  IServiceCollection 添加(IServiceCollection 收集、,Type  serviceType,, Type  implementationType,, ServiceLifetime 一生)   {   ,ServiceDescriptor  item =, new  ServiceDescriptor (serviceType, implementationType,,一生);   ,collection.Add(项);   ,return 收藏;   }

到这里,已经很清楚了,也已经接近我们今天的主题了,直接来吧

//, Microsoft.Extensions.DependencyInjection.ServiceLifetime   public  enum  ServiceLifetime   {   单,   作用域,   ,瞬态   }

上面的枚举里面就是提供了Singleton,范围和瞬态三种模式。去微软的文档里面看看,先了解一下这三种模式,在ServiceCollectionServiceExtensions就只有3个方法(有重载哟)

 . net中核心的注入模式有哪些

从源码里面绝对可以想的到,这3个方法是继承IServiceCollection。好了,说说这三种模式先,毕竟实现我们不是很关心(关心就看文档看源码)

(1)单例单一实例模式:单一实例对象对每个对象和每个请求都是相同的,可以说是不同客户端不同请求都是相同的。

(2)瞬态暂时性模式:暂时性对象始终不同,无论是不是同一个请求(同一个请求里的不同服务)同一个客户端,每次都是创建新的实例。

(3)范围作用域模式:作用域对象在一个客户端请求中是相同的,但在多个客户端请求中是不同的。(这句是文档的原话,我觉得描述的很清晰)

什么时候用哪种模式?这个不大好说(希望这个可以成为讨论点)

比如一下吧:

1,日志记录器可以实现为单例,因为在整个生命周期内都可以只使用一个实例;

2,数据库访问上下文(DbContext)选择范围的应该是最佳候选,因为服务。AddDbContext默认就是作用域(哈哈哈),

3,如果需要利用深度依赖关系图(深度依赖图)创建惟一对象,则可以考虑将该对象注册为短暂。

还有看看别人怎么说(对作用域的描述,在理解上可能不大一样,见仁见智了老铁)

 . net中核心的注入模式有哪些

还有一个stackoverflow的

 . net中核心的注入模式有哪些

按别人的经验,可以作为参考参考:

 . net中核心的注入模式有哪些

怎么验证吗?请用官方例子运行一下看结果:

浏览器第一个标签页面(第一个请求,可以认为是一个客户端):

 . net中核心的注入模式有哪些

net中核心的注入模式有哪些