Navigation

    西南IT社区
    • Register
    • Login
    • Search
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目

    Autofac一个令人着迷的.NET IoC 容器

    极客生涯
    autofac net ioc 容器
    1
    1
    28
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      banyuankang9 last edited by

        Autofac管理类之间的依赖关系。当应用程序的规模和复杂性随着时间不断增长时,也能易于更改。这是通过将常规 .NET 类视为组件来实现的。

        将 Autofac 集成到我们的应用程序的基本模式是:时刻牢记用控制反转(IOC)来构建我们的应用程序。最后需要添加Autofac引用。

        在应用程序启动时:首先需要创建一个ContainerBuilder。之后进行注册组件。并且需要构建容器并将其存储以备后用。

        在应用程序执行期间:首先从容器创建一个生命周期范围。并使用生命周期范围来解析(resolve)组件的实例。

        控制反转背后的思想是:与其将应用程序中的类捆绑在一起,让类“新建”它们的依赖关系,不如在类构造期间把依赖项传递进来,如果每次传递的依赖项不相同,则可以随时切换依赖关系并调用相应的依赖项的实现。

        在实际中,我们将定义一个将当前时间写出的类。但是,我们不希望将它绑定到Console,因为我们希望能够稍后测试该类,或者在控制台不可用的地方使用它。我们将尽可能地把写出时间的机制抽象化,因为如果我们以后想把它变成一个写出明天日期的程序版本,那么就可以快速实现该功能。
      d5c86db5-c3c2-4441-8eef-72faf3bc77d2-image.png
        容器本身就是一个生命周期范围,从技术上讲,我们可以直接从容器中解决问题。但是,这种方法一般情况下非常不建议直接使用从容器解析。

        当我们解析一个组件时,根据我们定义的实例范围,会创建该对象的一个​​新实例。简单来说解析一个组件大致相当于调用“new”来实例化一个类。这真的真的过于简单化了,但从类比的角度来看,这个比较很恰当。一些组件可能需要被释放,好比说它们实现了IDisposable一样——Autofac可以在生命周期范围被释放时自动为我们处理那些组件的释放。

        相反,如果我们从容器创建一个子生命周期范围并从中解析。当我们完成组件解析后,Autofac会帮我们自动释放子作用域并为清理所有内容。

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      使用HTML构建办公软件 使用HTML构建办公软件 使用HTML构建办公软件
      B
      光
      A
      庆
      小
      U
      Y
      L
      I
      Z
      I
      Y
      C
      Z
      E
      Y
      U
      I
      A
      Z
      Y
      Y
      罗
      R
      大

      西南地区IT社群(QQ)
      云南
      【昆明网页设计交流吧】243627302
      【昆明nodejs交流吧】 243626749
      【VUE】838405306
      【云南程序员总群】343606807
      【昆明UI设计】104031254
      【云南软件外包】15547313
      贵州
      【PHP/java源码/站长交流群】55692114
      四川
      【成都Java/JavaWeb交流】86669225
      【vaScript+PHP+MySql】116270060
      【UI设计/设计交流学习群】135794928
      重庆
      【诺基亚 JAVA游戏博物馆】 559479780
      【PHP,Java,Python,C++接单】 442103442
      西藏
      社群
      昆明网页设计交流吧
      友情链接
      • Funtask
      • Funtask 社区
      • SUWIS
      ©2019-2021 滇ICP备20006698号