1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        AutofacIoC依賴注入容器

        聯(lián)合創(chuàng)作 · 2023-09-30 07:15

        Autofac和其他容器的不同之處是它和C#語言的結(jié)合非常緊密,在使用過程中對你的應(yīng)用的侵入性幾乎為零,更容易與第三方的組件集成。

        Autofac的主要特性如下:

        1. 靈活的組件實例化:Autofac支持自動裝配,給定的組件類型Autofac自動選擇使用構(gòu)造函數(shù)注入或者屬性注入,Autofac還 可以基于lambda表達式創(chuàng)建實例,這使得容器非常靈活,很容易和其他的組件集成。 var defaultLog = new ConsoleLog();  builder.Register(c => new Connection(){ Log = c.ResolveOptional<ILog>() ?? defaultLog });大家知道lambda表達式并不是 在聲明的時候的執(zhí)行的,只有等到容器的Resolve()方法調(diào)用的時候,表達式才執(zhí)行。表達式還有一個好處是不需要使用反射或者是使用XML語法來表 達。
        2. 資源管理的可視性:基于依賴注入容器構(gòu)建的應(yīng)用程序的動態(tài)性,意味著什么時候應(yīng)該處理那些資源有點困難。Autofac通過跟蹤特 定作用域內(nèi)的實例和依賴來解決這個問題(DeterministicDisposal)。IDisposable接口接口是把雙刃劍,既是一個老孫手上 的金箍棒,也是老孫頭上的魔咒,有一種明確的方式告訴那一部分應(yīng)該被清理,但是一個組件要何時處理并不是很容易確定的事情,比如說一個服務(wù)可以有多個實現(xiàn) 的時候就變得很糟糕,組件的創(chuàng)建上(GOF的創(chuàng)建型設(shè)計模式)有的是通過工廠方式創(chuàng)建的,有的是單件方式創(chuàng)建的,有些需要被清理,有些卻不需要清理。組件 的使用者無法知道是否把轉(zhuǎn)換為IDisposable接口調(diào)用它的Disposal方法。Autofac通過容器來跟蹤組件的資源管理。對于不需要清理的 對象,例如Console.Out,我們調(diào)用ExternallyOwned()方法告訴容器不用清理。細(xì)粒度的組件生命周期管理:應(yīng)用程序中通??梢源?在一個應(yīng)用程序范圍的容器實例,在應(yīng)用程序中還存在大量的一個請求的范圍的對象,例如一個HTTP請求,一個IIS工作者線程或者用戶的會話結(jié)束時結(jié)束。 通過嵌套的容器實例和對象的作用域使得資源的可視化。
        3. Autofac的設(shè)計上非常務(wù)實,這方面更多是為我們這些容器的使用者考慮:
        • 組件侵入性為零:組件不需要去引用Autofac。
        • 靈活的模塊化系統(tǒng):通過模塊化組織你的程序,應(yīng)用程序不用糾纏于復(fù) 雜的XML配置系統(tǒng)或者是配置參數(shù)。
        • 自動裝配:可以是用lambda表達式注冊你的組件,autofac會根據(jù)需要選擇構(gòu)造函數(shù)或者屬 性注入
        • XML配置文件的支持:XML配置文件過度使用時很丑陋,但是在發(fā)布的時候通常非常有用
        • 組件的多服務(wù)支持:許 多設(shè)計師喜歡使用細(xì)粒度的接口來控制依賴 , autofac允許一個組件提供多個服務(wù)。
        瀏覽 20
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            韩国一区在线 | 五月丁香婷婷综合激情 | 日本熟妇成熟毛茸茸 | 免费aaa | 香蕉久久网 | 古代禁伦h肉全文免费阅读 | 国产在线天堂 | 亚洲一区二区三区偷拍女厕 | 亚洲va国产va天堂va久久 | 又粗又大又爽免费视频 |