SlideShare a Scribd company logo
1 of 21
Autofac
IoC / DI 框架
Allen liu 2022-06-01
大綱
01 概念
IOC / DI
02 Autofac
簡介 / 應用 / 實例
03 參考 / 提問
IOC: Inversion of Control 控制反轉
DI: Dependency Injection 依賴注入
01 概念 - IOC / DI
設計原則
實作
控制反轉 (Inversion of Control)
好萊塢原則 (Hollywood Principle)
Don‘t call us, we‘ll call you
01 概念 - IOC / DI
控制反轉 (Inversion of Control)
vs.
SOLID=> 依賴反轉 (Dependency Inversion Principle)
01 概念 - IOC / DI
反轉依賴關係
反轉控制流程
01 概念 - IOC / DI
依賴反轉 (Dependency Inversion Principle)
定義:高階模組不應依賴低階模組,兩個都應該依賴在抽象概念上
抽象概念不依賴細節,而是細節依賴在抽象概念。
「話不能說的太死,盡量講一些概念性的東西」
01 概念 - IOC / DI
依賴反轉 (Dependency Inversion Principle)
01 概念 - IOC / DI
反轉依賴關係
反轉控制流程
IOC
X
DIP
01 概念 - IOC / DI
反轉依賴關係
IOC
+
DIP
反轉控制流程
= 鬆散耦合系統
DI
01 概念 - IOC / DI
依賴注入 ( Dependency Injection )
將所需的 依賴實例,注入到高階模組中。
1. 建構元注入 ( Constructor Injection )
2. 設值方法注入 ( Setter Injection )
3. 介面注入 ( Interface Injection )
01 概念 - IOC / DI
依賴注入 ( Dependency Injection )
將所需的 依賴實例,注入到高階模組中。
1. 建構元注入 ( Constructor Injection )
2. 設值方法注入 ( Setter Injection )
3. 介面注入 ( Interface Injection )
IOC: 控制反轉。 DI: 依賴注入。
好萊塢原則 ( Hollywood Principle )
SOLID
Dependency Inversion Principle ( DIP ) 依賴反轉
Open / Close Principle ( OCP ) 開放/封閉原則
…etc.
01 概念 - IOC / DI
01 概念 - IOC / DI
反射 (Reflection)
.Net 提供的一個幫助類庫,
可以讀取並使用 Metadata。
IoC / DI 容器 ( Container )
透過 『反射 (Reflection) 機制』,『自
動生產』物件,動態生成實例,或由配
置文件 尋找依賴關係,描述該如何建構
實例、或檢查是否該為當前模組注入依
賴,將其提供給所需模組,
並管理該物件整個生命週期的
超級自動化工廠。
IoC 容器
Autofac 是一款 .NET IoC 容器.
它管理類別之間的依賴關係,
從而使應用在規模及復雜性增長的情況下
依然可以輕易地修改.
它的實現方式是將常規的 .net 類別當做元件處理
.
安裝-透過 NuGet 相關內容可參考官網
02 Autofac - 簡介
要註冊到 Container 的類別。
Component:
基本上就是你和 DI Container 要東西的時候,
他會 new 給你的類別
Service:
Component 會提供的服務,基本上會是 interface
告訴 ContainerBuilder 什麼
Service(Interface)
對應到什麼
Component(Interface 實作的 Class)
02 Autofac - 應用
Resolving
Build
Registering
02 Autofac - 應用
02 Autofac - 應用
Autofac 如何整合 Asp .net Mvc
Autofac.Integration,提供了幾個 helper 方便我們整合 Autofac 和 Mvc
DependencyResolver
Mvc 只能夠實例化預設無參數的建構子,
IOC/DI Container 有註冊 Service / Component
知道需要注入的 Component。
02 Autofac - 應用
* Autofac 抽換 Log 套件 Demo
* 旺宏專案應用
使用上並不難,
難的是如何在不同的情境使用它。
Release Notes
...etc.
02 Autofac - 實例
鄭中勝 - 控制反轉 IoC 與 依賴注入 DI
Alan Tsai - MVC 5 / IoC基本概念介紹
物件導向程式設計基本原則
Autofac 基本介紹
Autofac 筆記
Autofac 中文文檔
.NetCore DI
04
參考 / 提問
S => Single responsibility principle 單一職責
Don't Over Design -
e.g. 駕駛只要知道汽車怎麼開不用知道汽車怎麼組裝。
01 概念 - IOC / DI

More Related Content

Recently uploaded

怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息
怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息
怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息kiniondebnam806
 
黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放
黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放
黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放jianjuei
 
发春药在哪卖【网址☆THC88.com】发春药怎么购买
发春药在哪卖【网址☆THC88.com】发春药怎么购买发春药在哪卖【网址☆THC88.com】发春药怎么购买
发春药在哪卖【网址☆THC88.com】发春药怎么购买gongofdi
 
如何买卖迷药价格【网址☆THC88.com】如何买迷药
如何买卖迷药价格【网址☆THC88.com】如何买迷药如何买卖迷药价格【网址☆THC88.com】如何买迷药
如何买卖迷药价格【网址☆THC88.com】如何买迷药maormduq
 
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址trnkavanliew308
 
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖fanfkbok
 
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址trnkavanliew308
 
uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址
uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址
uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址trnkavanliew308
 
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学pingbizh
 
网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药
网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药
网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药zicsuwja
 
青岛约炮交友【选妞网址☆qmm123.com】青岛大学生
青岛约炮交友【选妞网址☆qmm123.com】青岛大学生青岛约炮交友【选妞网址☆qmm123.com】青岛大学生
青岛约炮交友【选妞网址☆qmm123.com】青岛大学生qianvdax
 
迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址
迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址
迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址trnkavanliew308
 
汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址
汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址
汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址trnkavanliew308
 
chat gpt账号购买👉top233.com👈chat gpt账号批发购买
chat gpt账号购买👉top233.com👈chat gpt账号批发购买chat gpt账号购买👉top233.com👈chat gpt账号批发购买
chat gpt账号购买👉top233.com👈chat gpt账号批发购买larondahannae1n
 
神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址
神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址
神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址trnkavanliew308
 
如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息
如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息
如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息zorrakaluzny948
 
迷醉药如何购买【网址☆THC88.com】迷醉药售卖
迷醉药如何购买【网址☆THC88.com】迷醉药售卖迷醉药如何购买【网址☆THC88.com】迷醉药售卖
迷醉药如何购买【网址☆THC88.com】迷醉药售卖chahuilu
 
上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特
上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特
上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特ezhaojiu
 
上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模
上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模
上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模ruegsgbn
 
三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药
三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药
三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药fanfkbok
 

Recently uploaded (20)

怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息
怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息
怎么用手机号码查机主姓名【下单查询网站:KF367.com】专业查询服务,查询个人信息通过手机号码查询身份证信息
 
黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放
黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放
黄色网站引流渠道【推广网址☆seotg8.com】黄色网站广告投放
 
发春药在哪卖【网址☆THC88.com】发春药怎么购买
发春药在哪卖【网址☆THC88.com】发春药怎么购买发春药在哪卖【网址☆THC88.com】发春药怎么购买
发春药在哪卖【网址☆THC88.com】发春药怎么购买
 
如何买卖迷药价格【网址☆THC88.com】如何买迷药
如何买卖迷药价格【网址☆THC88.com】如何买迷药如何买卖迷药价格【网址☆THC88.com】如何买迷药
如何买卖迷药价格【网址☆THC88.com】如何买迷药
 
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
 
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
 
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
 
uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址
uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址
uu短视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆抖音网红资源破解版app最新下载地址
 
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
 
网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药
网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药
网上哪卖迷药如何买【网址☆THC88.com】网上能买到吗迷药
 
青岛约炮交友【选妞网址☆qmm123.com】青岛大学生
青岛约炮交友【选妞网址☆qmm123.com】青岛大学生青岛约炮交友【选妞网址☆qmm123.com】青岛大学生
青岛约炮交友【选妞网址☆qmm123.com】青岛大学生
 
迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址
迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址
迷妹漫画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆tv破解版app最新下载地址
 
汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址
汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址
汤头条【破解版下载:K782.com】☆☆☆官网下载☆☆☆成人资源破解版app最新下载地址
 
chat gpt账号购买👉top233.com👈chat gpt账号批发购买
chat gpt账号购买👉top233.com👈chat gpt账号批发购买chat gpt账号购买👉top233.com👈chat gpt账号批发购买
chat gpt账号购买👉top233.com👈chat gpt账号批发购买
 
神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址
神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址
神户live【破解版下载:K782.com】☆☆☆官网下载☆☆☆GTV破解版app最新下载地址
 
如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息
如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息
如何用信息查询开房记录【下单查询网站:KF367.com】根据个人信息查询开房同住人,查开房记录,开房信息查询,查询酒店入住记录信息
 
迷醉药如何购买【网址☆THC88.com】迷醉药售卖
迷醉药如何购买【网址☆THC88.com】迷醉药售卖迷醉药如何购买【网址☆THC88.com】迷醉药售卖
迷醉药如何购买【网址☆THC88.com】迷醉药售卖
 
上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特
上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特
上海高端外围包夜【选妞网址☆qmm123.com】上海外围网红模特
 
上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模
上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模
上海长宁区外围预约【选妞网址☆qmm123.com】上海长宁区嫩模
 
三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药
三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药
三唑仑-迷药-乖乖水【网址☆THC88.com】什么地方能买到迷药
 

Featured

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Featured (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

Autofac.pptx

  • 1. Autofac IoC / DI 框架 Allen liu 2022-06-01
  • 2. 大綱 01 概念 IOC / DI 02 Autofac 簡介 / 應用 / 實例 03 參考 / 提問
  • 3. IOC: Inversion of Control 控制反轉 DI: Dependency Injection 依賴注入 01 概念 - IOC / DI 設計原則 實作
  • 4. 控制反轉 (Inversion of Control) 好萊塢原則 (Hollywood Principle) Don‘t call us, we‘ll call you 01 概念 - IOC / DI
  • 5. 控制反轉 (Inversion of Control) vs. SOLID=> 依賴反轉 (Dependency Inversion Principle) 01 概念 - IOC / DI 反轉依賴關係 反轉控制流程
  • 6. 01 概念 - IOC / DI 依賴反轉 (Dependency Inversion Principle) 定義:高階模組不應依賴低階模組,兩個都應該依賴在抽象概念上 抽象概念不依賴細節,而是細節依賴在抽象概念。 「話不能說的太死,盡量講一些概念性的東西」
  • 7. 01 概念 - IOC / DI 依賴反轉 (Dependency Inversion Principle)
  • 8. 01 概念 - IOC / DI 反轉依賴關係 反轉控制流程 IOC X DIP
  • 9. 01 概念 - IOC / DI 反轉依賴關係 IOC + DIP 反轉控制流程 = 鬆散耦合系統 DI
  • 10. 01 概念 - IOC / DI 依賴注入 ( Dependency Injection ) 將所需的 依賴實例,注入到高階模組中。 1. 建構元注入 ( Constructor Injection ) 2. 設值方法注入 ( Setter Injection ) 3. 介面注入 ( Interface Injection )
  • 11. 01 概念 - IOC / DI 依賴注入 ( Dependency Injection ) 將所需的 依賴實例,注入到高階模組中。 1. 建構元注入 ( Constructor Injection ) 2. 設值方法注入 ( Setter Injection ) 3. 介面注入 ( Interface Injection )
  • 12. IOC: 控制反轉。 DI: 依賴注入。 好萊塢原則 ( Hollywood Principle ) SOLID Dependency Inversion Principle ( DIP ) 依賴反轉 Open / Close Principle ( OCP ) 開放/封閉原則 …etc. 01 概念 - IOC / DI
  • 13. 01 概念 - IOC / DI 反射 (Reflection) .Net 提供的一個幫助類庫, 可以讀取並使用 Metadata。 IoC / DI 容器 ( Container ) 透過 『反射 (Reflection) 機制』,『自 動生產』物件,動態生成實例,或由配 置文件 尋找依賴關係,描述該如何建構 實例、或檢查是否該為當前模組注入依 賴,將其提供給所需模組, 並管理該物件整個生命週期的 超級自動化工廠。
  • 14. IoC 容器 Autofac 是一款 .NET IoC 容器. 它管理類別之間的依賴關係, 從而使應用在規模及復雜性增長的情況下 依然可以輕易地修改. 它的實現方式是將常規的 .net 類別當做元件處理 . 安裝-透過 NuGet 相關內容可參考官網 02 Autofac - 簡介
  • 15. 要註冊到 Container 的類別。 Component: 基本上就是你和 DI Container 要東西的時候, 他會 new 給你的類別 Service: Component 會提供的服務,基本上會是 interface 告訴 ContainerBuilder 什麼 Service(Interface) 對應到什麼 Component(Interface 實作的 Class) 02 Autofac - 應用 Resolving Build Registering
  • 16. 02 Autofac - 應用
  • 17. 02 Autofac - 應用
  • 18. Autofac 如何整合 Asp .net Mvc Autofac.Integration,提供了幾個 helper 方便我們整合 Autofac 和 Mvc DependencyResolver Mvc 只能夠實例化預設無參數的建構子, IOC/DI Container 有註冊 Service / Component 知道需要注入的 Component。 02 Autofac - 應用
  • 19. * Autofac 抽換 Log 套件 Demo * 旺宏專案應用 使用上並不難, 難的是如何在不同的情境使用它。 Release Notes ...etc. 02 Autofac - 實例
  • 20. 鄭中勝 - 控制反轉 IoC 與 依賴注入 DI Alan Tsai - MVC 5 / IoC基本概念介紹 物件導向程式設計基本原則 Autofac 基本介紹 Autofac 筆記 Autofac 中文文檔 .NetCore DI 04 參考 / 提問
  • 21. S => Single responsibility principle 單一職責 Don't Over Design - e.g. 駕駛只要知道汽車怎麼開不用知道汽車怎麼組裝。 01 概念 - IOC / DI

Editor's Notes

  1. 設計原則。指導行動的“最高標準”,“一套標準”。 實作。實際操作。實地操作。實際製作
  2. IOC的原理就是基於好萊塢原則,所有的組件都是被動的(Passive),所有的組件初始化和調用都由容器負責。解除了 高階模組 主動對 低階元件實例的依賴 舉例子來講 網咖遊戲都是預先安裝好給你玩的版本也是老闆選擇的,今天要換版本或是換遊戲,都由老闆抽換後,你直接玩就好。 麥當勞菜單都是固定的你只能點當季餐點,只要點餐就好不用管餐點從哪來。 補充 不用講 (但比較要注意的一點是如果這時候還是用 NEW 的方式,沒利用到 DI 則是有照 IOC 但沒照 DIP 的狀況,後續會提到 )
  3. 再來是很容易搞錯的 控制反轉與 依賴反轉 反轉控制流程 倒轉的則是 實例依賴物件 (don‘t call us, we‘ll call you) --- 高階模組不應該依賴於低階模組,兩者都該依賴抽象。 抽象不應該依賴於具體實作方式。具體實作方式則應該依賴抽象。
  4. 那什麼是依賴抽象呢,簡單講就是利用抽象,達到鬆耦合 (Loose coupling) 目的
  5. 沒有彈性的寫法在 _定義(Declare)_參數的瞬間就_已經決定了_這個參數的具體使用方式。因此和一般的程式flow是一樣的,重上到下 使用interface的寫法,是在 _實例(也就是new())的時候才決定具體的使用方法。因此它的flow是到要用的時候才會new,所以是_依照 後面要什麼來控制的。
  6. IOC 與 DIP 是兩種設計原則,講的是不同事情,雖然 IOC 解除了 高階模組 主動對 低階元件的實例方式, 卻 解除不了 高階模組 對 低階模組 的 依賴關係。
  7. 所以我們就要藉由兩種設計原則,由 服務容器 (IoC 容器) 透過 “依賴注入”,給予 高階模組 所需得具體實例 取代傳統的主動建立實例 高階模組,依賴於抽象,而非低階模組。 但 要使用 該抽象的 (低階模組) 時, 不用也不需要知道是哪種 具體產品 不再自己實例 具體產品,而是 服務容器 會提供給他 。 補充 IoC/DI ,並非實現 "DIP" 的唯一解, 還有 工廠方法模式 (Factory Method Pattern)、服務定位模式 (Service Locator Pattern), 以及各種的 建立型模式 (Creational Pattern)…,皆可以消除 實例具體產品 (插件 Plugin) 的依賴關係。
  8. 那什麼是di 呢 將所需的 依賴實例,用注入的方式,注入到高階模組中。分為三個時機點可以注入
  9. DI 可以在這幾個時機使用,但以 MVC專案來說不支援有參數的建構子,這部分會由接下來講到的 IOC 容器框架解決。
  10. 所以我們知道 IOC DI 很好的實現了以下原則,讓程式鬆耦合
  11. 但是這邊遇到了個問題,DI 我們可以用手動的方式達到,但是其實還是_不彈性_。 舉例來說,當我要切換實作的時候,還是需要改code並且重新編譯。因此本質上還是沒有彈性的效果。 所以又有 了 IoC 容器 來輔助我們 (又稱: 服務容器 Service Container), 大部分框架的 IoC 容器,幾乎都透過 『反射 (Reflection) 機制』, 來 動態生成實例、或由配置文件尋找依賴關係, 描述該如何建構實例、或檢查是否該為當前模組注入依賴 …。 因此容器,通常會有個 bind (或 register、config …etc.) 的函數, 供 註冊依賴關係、或告訴容器: 何種情境需要該實例。 再來,通常也會有有個 make (或 create、resolve …etc.), 讓容器 解析物件,或實例已綁定之物件。 是 組裝 & 配置元件,透過 依賴注入 (Dependency Injection), 提供所需服務給模組的地方。
  12. 比較常見的.Net DI Container做效能和功能的比較 在一個龐大且複雜的系統中要將資料來源由查詢資料庫改成從檔案讀取資料, 會影響系統中數百段用到資料查詢來源的程式碼, 現在只需要調整 IOC 對應的 Service Component
  13. 實作 IOC DI 容器,其實只要做到這己見事 註冊階段主要是在將Service和Component註冊對應關係,註冊的方式有很多種情境,包含最基本的指定型別註冊、甚至可以直接掃描Assembly根據裡面的內容來做大量註冊的動作。 雖然已經註冊好關係,但有用的是實際的類別。透過Autofac,我只要跟它說我需要一個實際的物件,而且必須是XX的類型。容器會根據你所註冊的關係,將其 Build 實體化之後返回。 --- 再來是一些管理這些實例生命週期的方法 --- 以下為補充 以往用new的方式建立物件,使用完畢後,即使不釋放(dispose)該物件,也會有記憶體回收機制來幫忙處理。但使用Autofac處理相依性後,原本new的動作將交由Autofac來處理,所以Autofac會主導此物件的生命週期,原本的記憶體回收機制就不會干涉,物件的釋放由Autofac全權處理。講白話就是,假如沒有釋放Autofac建立的物件,最終將會耗盡所有記憶體。 但也不必太擔心,Autofac本身有提供很多管理物件生命週期的方式,讓物件和記憶體的使用更有效率。以下就簡單介紹一下最基本的用法,使用Using搭配BeginLifetimeScope()來達到效果,在Using的結尾處,括號內的物件都會自動被釋放(dispose)。
  14. 這邊就是實際使用時的步驟,主要就是要藉由 IOC DI 容器的方法,註冊介面
  15. 再藉由 IOC DI 容器來提供實例
  16. 剛剛開始所講到的,其實一般都是藉由建構子注入依賴, 但一般的 MVC 只能夠實例化預設(無參數)的建構子, 因為它不知道每一個參數是對應到什麼class,因此沒有辦法做下去。 那這邊利用到的是 MVC 專案所提供的接口 IDependencyResolver 允許客製化 IOC 解析器 我們就能藉由 Autofac DependencyResolver 實例化,就能在建構子時注入 ---補充 第一個當然是IDependencyResolver的實作,方便使用Autofac作為Mvc的DI ContainerBuilder有多一個RegisterControllers的擴充方法,只要把Controller所在的Assembly給他, 它就會幫我們把所有Controller都註冊成為Component 之前講註冊Service的時候,沒有提到Component的Lifetime Scope(這方面比較細部因此不會介紹,有興趣可以看文件),在裝了這個Integration, 會多一個Lifetime Scope是InstancePerHttpRequest,表示每一次Request都是新的物件 有提供能夠動態注入ModelBinder到Mvc 提供一個Autofac的Module方便注入Http相關 - 因此要取得像Session、Request等變的簡單 提供注入Property到View和ActionFilter裡面
  17. 這邊只是引導一個開頭,打開書籤講解 Autofac 簡易 Demo 1. 這是個普通的 mvc 專案,首先看到參考,跟其他套件安裝上比較不一樣的是,除了主要的 autofac 還必須包含像是 mvc 或 api 的整合庫 2. 接著這裡簡單實作了兩種 log 一種是作 初始專案較簡易的 log 另一個則是用 nlog 在 release 時更多面向的 log 3. 則會藉由在 Global 時,判斷狀況由 ioc 提供不同的實作, 專案上更進階的使用 autofac 1. 一樣首先註冊ioc,參考內一樣是藉由整合庫整合 api 專案,一樣是去使用 build 好的容器 AutofacModule 當要註冊 IMessage 這個抽象介面的時候,Autofac DI Container 將會幫我們產生一個 ConsoleMessage 類別的物件。 RegisterType 註冊類別時使用 ResolveNamed 介面實作了多個類別,Resolve<>() 時希望透過參數指定傳回不同類別。 利用介面實作不同的 write 的關係