tnblog
首页
视频
资源
登录

依赖注入 生命周期

6410人阅读 2020/3/20 17:43 总访问:103558 评论:0 收藏:0 手机
分类: 依赖注入

.net core里面

依赖注入生命 大部分常用的就三总 

    • Scoped(作用域 也可以说是线程单例 

        在同一个线程里是单例的 

    • Transient(瞬时)

      每一次请求都是一个全新的实例 适用于轻量级无状态服务

    • Singleton(单例模式)

    应用启动时候被创建一次 后面都是使用第一次创建的实例




      


我用 Unity做了一个例子出来

  1. public interface IReady
  2.     {
  3.         string Getcontent();
  4.     }
  5.     public class Book : IReady
  6.     {
  7.         public string Getcontent()
  8.         {
  9.             return "Say Book";
  10.         }
  11.     }
  12.     public class Paper : IReady
  13.     {
  14.         public string Getcontent()
  15.         {
  16.             return "Say Paper";
  17.         }
  18.     }
  19.     public class Father
  20.     {
  21.         public IReady Ready { getset; }
  22.         public Father(IReady ready)
  23.         {
  24.             Ready = ready;
  25.         }
  26.         public void Action()
  27.         {
  28.             Console.WriteLine("ACtion");
  29.             Console.WriteLine(Ready.Getcontent());
  30.         }
  31.     }

瞬时


  1.  static void Main(string[] args)
  2.  {
  3.   var container = new UnityContainer();
  4.                 container.RegisterType<IReady, Book>();
  5.                 //Unity 瞬时
  6.                 container.RegisterType<Father>();
  7.                 var father1 = container.Resolve<Father>();
  8.                 var father2 = container.Resolve<Father>();
  9.                 ////father1.Action();
  10.                 Console.WriteLine($" father1 = father1 : {ReferenceEquals(father1, father2)}");
  11.  }

对比出的结果是 false Unity里面的默认注册生命周期是瞬时


单例

  1. //Unity单例
  2.                 container.RegisterSingleton<Father>();
  3.                 var father1 = container.Resolve<Father>();
  4.                 var father2 = container.Resolve<Father>();
  5.                 Console.WriteLine($"father1 = father2 :{ReferenceEquals(father1,father2)}");

结果是 true 证明 father2和father1使用的是一个实例


线程单例(作用域)

  1.  var container = new UnityContainer();
  2.                 container.RegisterType<IReady, Book>();
  3.                 container.RegisterType<Father>(TypeLifetime.PerThread);
  4.                 Father father1 = null;
  5.                 Father father2 = null;
  6.                 Father father3 = null;
  7.                 var task1 = Task.Run(() =>
  8.                 {
  9.                     father1 = container.Resolve<Father>();
  10.                     Console.WriteLine($"当前线程的Id={Thread.GetCurrentProcessorId()}");
  11.                 });
  12.                 var task2 = Task.Run(() =>
  13.                 {
  14.                     father2 = container.Resolve<Father>();
  15.                     father3 = container.Resolve<Father>();
  16.                     Console.WriteLine($"当前的线程Id={Thread.GetCurrentProcessorId()}");
  17.                 });
  18.                 task1.Wait();
  19.                 task2.Wait();
  20.                 Console.WriteLine($"father1 = father2 :{ReferenceEquals(father1,father2)}");
  21.                 Console.WriteLine($"father2 = father3 :{ReferenceEquals(father3, father2)}");

结果分别是 false 和true 证明 一个线程里面是使用的是一个实例 分开了 使用的就是不同的实例

评价

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

c使用unity实现依赖注入一:依赖注入介绍

依赖注入的简单介绍直接关联是这样滴,耦合性超高的。这里有一个设计原则:依赖于抽象,而不是具体的实现试想一下如果做了...

c使用unity实现依赖注入二:基本使用

使用Unity实现依赖注入的基本步骤:1:需要创建一个容器2:给容器添加类与类之间的关系(控制反转)3: 在需要的地方从容器里...

c使用unity实现依赖注入三:unity常用生命周期

常用的生命周期有瞬时模式,单利模式,每个线程一个对象模式等。一:TransientLifetimeManagerTransientLifetimeManager模...

c使用unity实现依赖注入四:unity配置文件注入

需要用到的配置文件一:先向xml申明一下unity的配置文件所在的实现类&lt;configSections&gt; &lt;sectionname=&quot;unity...

Net Core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...

net core依赖注入

添加注入首先需要添加好一个注入:其实添加好类与类之间的关系,在ConfigureServices中添加注入services.AddTransient&lt;I...

net core过滤器。net core过滤器中获取依赖注入对象。net core过滤器中使用依赖注入。ServiceFilter 

虽然对象都可以直接实例化得到。但是所有的对象依赖关系,都用DI容器去管理,这样后面想要更换对象的时候也非常方便,项目...

net core控制器(控制台)中使用依赖注入

net core中使用的依赖注入默认是:DependencyInjection使用nuget下载:install-package Microsoft.Extensions.DependencyIn...

IOC(控制反转)与DI(依赖注入

IOC与DI都是为了降低类与类之间的耦合度。耦合性耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量...

IOC (控制反转) Dl (依赖注入

IOC:控制反转DI:注入依赖讲解:类与类之间的耦合性我们之间都是用NEW关键之直接实例化,这样耦合性很高,但是修改很麻烦今...

IOC控制反转和DI依赖注入

IOC控制反转 概念:把类与类的控制器交给容器就是控制反转 使用控制反转一般步骤: (1) 准备一个容器(创建一个类) ...

net core手动获取依赖注入对象

耍朋友的时候要像已经结婚了结了婚要当这婚还没结控制器相关中:HttpContext来获取实例HttpContext下有一个RequestedServic...

.net core 使用依赖注入session

tip:net core 2.2版本后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了的使用工具nuget包管理器 添...

NET Core创建EF与依赖注入

第一步:创建一个NET Core项目第二步:使用Nuget(程序包管理控制台)添加EF的依赖输入命令: Install-Package Microsoft.En...
我要变强不变秃
排名
3
文章
317
粉丝
22
评论
14
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术