.NET开源IOC内置容器,生命周期管理与Autofac扩展

这篇具有很好参考价值的文章主要介绍了.NET开源IOC内置容器,生命周期管理与Autofac扩展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

.NET开源IOC内置容器,生命周期管理与Autofac扩展

大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家从基础小白到高阶的.NET的IOC容器依赖与注入,以及IOC内置容器和生命周期,Autofac的学习,跟上我的步伐进入C#的世界。
微信:15319589104
QQ: 2981345658

文章内容:
.NET依赖注入容器的生命周期管理,瞬时生命周期(Transient Lifetime)、瞬时生命周期(Transient Lifetime)、作用域生命周期(Scoped Lifetime、Autofac扩展的安装与配置、Autofac是一个流行的开源依赖注入容器,它提供了丰富的扩展性和配置选项。通过安装Autofac NuGet包,您可以轻松地将Autofac集成到您的.NET项目中。配置Autofac主要包括注册服务和组件、配置生命周期和设置解析策略等步骤。

IOC内置生命周期

在C#中,生命周期指的是对象的创建和销毁过程。在讨论C#中的生命周期时,我们通常会涉及到瞬时生命周期、作用域生命周期和单例生命周期。这些生命周期模式定义了对象的创建和销毁时间,以及它们如何被使用。

下面会讲到IOC容器所支持的生命周期,瞬时生命周期AddTransient,作用域生命周期AddScoped,单例生命周期AddSingleton

瞬时生命周期AddTransient

概念:瞬时生命周期也称为短生命周期或隐式生命周期。这意味着对象在声明它的作用域内被创建,并在该作用域结束时自动销毁。

利用场景:瞬时生命周期常用于不需要长时间持有或需要自动释放资源的对象,例如文件流、数据库连接等。

案例:
1.0准备IOC.Interfaces,准备一个接口为IHeadphone

    /// <summary>
    /// 先定义接口
    /// </summary>
    public interface IHeadphone
    {

    }

1.1准备IOC.Services,准备一个是实现类Headphone,继承IHeadphone

    public class Headphone : IHeadphone
    {
        public Headphone()
        {
            Console.WriteLine($"{this.GetType().Name}被构造。。");
        }
    }

1.2下面我们在UIL也就是主程序的控制台,进行编写

        //1.瞬时生命周期,用AddTransient方法注册--每一次获取的对象的实例都是全新的实例
        {
            ServiceCollection serviceDescriptors = new ServiceCollection();
            serviceDescriptors.AddTransient<IHeadphone, Headphone>();
            //实例化对象了一次
            IServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();

            IHeadphone headphone1 = serviceProvider.GetService<IHeadphone>();
            IHeadphone headphone2 = serviceProvider.GetService<IHeadphone>();
            IHeadphone headphone3 = serviceProvider.GetService<IHeadphone>();
            IHeadphone headphone4 = serviceProvider.GetService<IHeadphone>();

            //生命周期相同为true,不同的话为false
            Console.WriteLine($"headphone1 是否和 headphone1 同一个内存指向:{object.ReferenceEquals(headphone1, headphone1)}");
            Console.WriteLine($"headphone2 是否和 headphone2 同一个内存指向:{object.ReferenceEquals(headphone2, headphone2)}");
            Console.WriteLine($"headphone1 是否和 headphone3 同一个内存指向:{object.ReferenceEquals(headphone1, headphone3)}");
            Console.WriteLine($"headphone1 是否和 headphone4 同一个内存指向:{object.ReferenceEquals(headphone1, headphone4)}");
        }

运行结果为下:
.NET开源IOC内置容器,生命周期管理与Autofac扩展,C#,.net,微软,.net,开源,微软

作用域生命周期AddScoped

概念:作用域生命周期是指对象在其被声明的代码块(如方法、循环等)内存在的时间。当代码块执行完毕后,对象会自动离开作用域并可能被垃圾回收

利用:这种生命周期适用于不需要长时间持有或不需要显式管理生命周期的对象。如果对象仅在某个代码块中需要,则可以使用作用域生命周期。它也可以用于资源密集型对象,其中手动管理生命周期可能太复杂或容易出错。

案例:文章来源地址https://www.toymoban.com/news/detail-810991.html

        //2.作用域生命周期:用AddScoped方法注册---同一个IServiceProvider获取的对象实例是同一个实例--内存指向是一样的
        {
            ServiceCollection serviceDescriptors = new ServiceCollection();
            serviceDescriptors.AddScoped<IHeadphone, Headphone>();//瞬间生命周期的注册
            //第一次对象实例化,实例化对象为headphone1和headphone2,调用了serviceProvider1
            IServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
            IHeadphone headphone1 = serviceProvider1.GetService<IHeadphone>();
            IHeadphone headphone2 = serviceProvider1.GetService<IHeadphone>();
            //第二次对象实例化,实例化对象为headphone3和headphone4,调用了serviceProvider2
            IServiceProvider serviceProvider2 = serviceDescriptors.B

到了这里,关于.NET开源IOC内置容器,生命周期管理与Autofac扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试|全面解析Docker Start/Stop/Restart命令:管理容器生命周期的必备工具

    简介 Docker是一种流行的容器化平台,用于构建、分发和运行应用程序。在使用Docker时,经常需要管理容器的生命周期,包括启动、停止和重启容器。本文将详细介绍Docker中的 docker start 、 docker stop 和 docker restart 命令,帮助您全面了解如何管理容器的运行状态。 在Docker中,容

    2024年02月08日
    浏览(51)
  • 最强的单点登录认证系统,基于RBAC统一权限控制,实现用户生命周期管理,开源、安全

    MaxKey 单点登录认证系统,谐音马克思的钥匙寓意是最大钥匙,是 业界领先的IAM-IDaas身份管理和认证产品 ,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供 安全、标准和开放 的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。 MaxKey注

    2024年02月03日
    浏览(57)
  • Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式

    目录 一、对象的创建方式 1. 使用构造方法 2. 使用工厂类方法 3. 使用工厂类的静态方法 二、对象的创建策略 1. 单例策略 2. 多例策略 三、对象的销毁时机 四、生命周期方法 1. 定义生命周期方法 2. 配置生命周期方法 3. 测试 五、获取Bean对象的方式 1. 通过id/name获取 2. 通过类

    2024年02月01日
    浏览(42)
  • 【Spring专题】Spring之Bean的生命周期源码解析——阶段二(IOC之实例化)

    由于Spring源码分析是一个前后联系比较强的过程,而且这边分析,也是按照代码顺序讲解的,所以不了解前置知识的情况下,大概率没办法看懂当前的内容。所以,特别推荐看看我前面的文章(自上而下次序): Spring底层核心原理解析——引导篇【学习难度: ★★☆☆☆ 】

    2024年02月13日
    浏览(55)
  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(51)
  • 【Spring专题】Spring之Bean的生命周期源码解析——阶段二(二)(IOC之属性填充/依赖注入)

    由于Spring源码分析是一个前后联系比较强的过程,而且这边分析,也是按照代码顺序讲解的,所以不了解前置知识的情况下,大概率没办法看懂当前的内容。所以,特别推荐看看我前面的文章(自上而下次序): Spring底层核心原理解析【学习难度: ★★☆☆☆ 】 手写简易

    2024年02月12日
    浏览(39)
  • Vue2-收集表单数据、过滤器、内置指令与自定义指令、Vue生命周期

    🥔:我徒越万重山 千帆过 万木自逢春 更多Vue知识请点击——Vue.js 1、不同标签的value属性 若: input type=\\\"text\\\"/ 普通输入框,则v-model收集的是value值,用户输入的就是value值。 若: input type=\\\"radio\\\"/ 单选框,则v-model收集的是value值,且要给标签配置value值。 若: input type=\\\"checkb

    2024年02月13日
    浏览(49)
  • Docker 容器生命周期:创建、启动、暂停与停止

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月14日
    浏览(39)
  • .NET6.0实现IOC容器

    IOC 的作用这里省略…只对如何使用进行说明。 这里使用 .NET6.0 WebAPI 应用 下面是在 program 类中的代码 通过在 Controller 的构造函数中注入 IAuthService 启动后,通过 swagger 发起请求,验证接口。 基本 IOC容器 流程已实现。但是这样存在一个弊端,每个接口和实现都要在 program 中手

    2024年02月10日
    浏览(45)
  • ASP.NET Core IOC容器

      ServiceCollection 抽象和具体之间多种注册方式

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包