
.net core里面
依赖注入生命 大部分常用的就三总
Scoped(作用域 也可以说是线程单例
在同一个线程里是单例的
Transient(瞬时)
Singleton(单例模式)
每一次请求都是一个全新的实例 适用于轻量级无状态服务
应用启动时候被创建一次 后面都是使用第一次创建的实例
我用 Unity做了一个例子出来
public interface IReady { string Getcontent(); } public class Book : IReady { public string Getcontent() { return "Say Book"; } } public class Paper : IReady { public string Getcontent() { return "Say Paper"; } } public class Father { public IReady Ready { get; set; } public Father(IReady ready) { Ready = ready; } public void Action() { Console.WriteLine("ACtion"); Console.WriteLine(Ready.Getcontent()); } }
瞬时
static void Main(string[] args) { var container = new UnityContainer(); container.RegisterType<IReady, Book>(); //Unity 瞬时 container.RegisterType<Father>(); var father1 = container.Resolve<Father>(); var father2 = container.Resolve<Father>(); ////father1.Action(); Console.WriteLine($" father1 = father1 : {ReferenceEquals(father1, father2)}"); }
对比出的结果是 false Unity里面的默认注册生命周期是瞬时
单例
//Unity单例 container.RegisterSingleton<Father>(); var father1 = container.Resolve<Father>(); var father2 = container.Resolve<Father>(); Console.WriteLine($"father1 = father2 :{ReferenceEquals(father1,father2)}");
结果是 true 证明 father2和father1使用的是一个实例
线程单例(作用域)
var container = new UnityContainer(); container.RegisterType<IReady, Book>(); container.RegisterType<Father>(TypeLifetime.PerThread); Father father1 = null; Father father2 = null; Father father3 = null; var task1 = Task.Run(() => { father1 = container.Resolve<Father>(); Console.WriteLine($"当前线程的Id={Thread.GetCurrentProcessorId()}"); }); var task2 = Task.Run(() => { father2 = container.Resolve<Father>(); father3 = container.Resolve<Father>(); Console.WriteLine($"当前的线程Id={Thread.GetCurrentProcessorId()}"); }); task1.Wait(); task2.Wait(); Console.WriteLine($"father1 = father2 :{ReferenceEquals(father1,father2)}"); Console.WriteLine($"father2 = father3 :{ReferenceEquals(father3, father2)}");
结果分别是 false 和true 证明 一个线程里面是使用的是一个实例 分开了 使用的就是不同的实例
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术