.NET 相依性注入
.NET 相依性注入
$14.00
最低
$18.00
建議
.NET 相依性注入

本書目前的完成進度是 100%

完成於 2018-09-03

關於本書

邁向專業開發人員之路...

本書內容是關於.NET相依性注入(dependency injection;簡稱DI)的相關議題。透過本書,您將會瞭解:

  • 什麼是 DI、它有什麼優點、何時使用 DI、以及可能碰到的陷阱。
  • 如何運用 DI 應付容易變動的軟體需求,設計出更彈性、更好維護的程式碼。
  • 與 DI 有關的設計模式。
  • DI 於 .NET 應用程式中的實務應用,包括 ASP.NET MVC、ASP.NET Web API等等。
  • 如何使用 DI 容器(例如 Unity)來協助開發應用程式。

本書的範例皆以C#撰寫,讀者無須具備任何 DI 背景知識。

這不是 .NET 程式設計的入門書。為了避免讀者花錢買了不適合自己的書,容筆者斗膽列舉閱讀本書的基本條件:

  • 熟悉 C# 語法,包括擴充方法(extrension methods)、泛型(generics)、委派(delegates)等等。如果精通的是 VB(或其他 .NET 語言)但不排斥 C# 語法,也是 OK 的。 
  • 具備物件導向的基礎概念,知道何謂封裝、繼承、多型(polymorphism)。

倒不是說,不符合以上條件的讀者就無法從本書汲取有用的東西;只是就一般的情況而言,讀起來會比較辛苦一些。

如果您曾經接觸、研究過設計模式(design patterns),有些章節閱讀起來會輕鬆一些。然而這並非基本要求,因為本書也會一併介紹相關的設計模式與原則,例如 Decorator 模式、Factory 模式、開放/封閉原則(Open/Closed Principle)、單一責任原則(Single Responsibility Principle)等等。

此外,如果下列描述有一些符合您現在的想法,那麼本書也許對您有幫助:

  • 我的日常開發工作需要設計共用的類別庫或框架,供他人使用。
  • 我經常使用第三方(third-party)元件或框架,而且它們都提供了某種程度的 DI 機制。為了充分運用這些機制,我必須了解 DI 的各種用法。
  • 我希望能夠寫出寬鬆耦合、容易維護的程式碼。
  • 我已經開始運用寬鬆耦合的設計原則來寫程式,我想知道更多有關 DI 的細節,以了解有哪些陷阱和迷思,避免設計時犯了同樣的毛病。

無論別人怎麼說,自己讀過的感覺最準。強烈建議您先讀完本書的試閱章節(包含本書前言和第 1 章完整內容),以評估這本書是否適合你。 

Table of Contents

  •  
    • 致謝
    • 關於本書
      • 何處購買?
      • 誰適合閱讀本書
      • 如何閱讀本書
      • 書寫慣例
      • 需要準備的工具
      • 範例程式與補充資料
    • 關於作者
    • 版本更新紀錄
      • 2018 年 8 月
  • Part I:基礎篇
    • 第 1 章:導論
      • 為什麼需要 DI?
        • 可維護性
        • 寬鬆耦合
        • 可測試性
        • 平行開發
      • 什麼是 DI?
        • 入門範例—非 DI 版本
        • 入門範例—DI 版本
          • 提煉介面(Extract Interface)
          • 控制反轉(IoC)
      • 何時該用 DI?
      • 本章回顧
    • 第 2 章:DI 用法與模式
      • 設計模式梗概
        • 小引-電器與介面
        • Null Object 模式
        • Decorator 模式
        • Composite 模式
        • Adapter 模式
        • Factory 模式
      • 注入方式
        • 建構式注入
          • 已知應用例
          • 用法
          • 範例程式
        • 屬性注入
          • 已知應用例
          • 用法
          • 範例程式
        • 方法注入
          • 已知應用例
          • 用法
          • 範例
      • Ambient Context 模式
        • 已知應用例
        • 範例程式(一)
        • 範例程式(二)
      • Service Locator 模式
      • 過猶不及-再談建構式注入
        • 半吊子注入
          • 阻止相依蔓延
          • 解決「半吊子注入」
        • 過度注入
          • 重構成參數物件
          • 多載建構函式
          • 重構成 Façade 模式
      • 本章回顧
    • 第 3 章:DI 容器
      • DI 容器簡介
        • 物件組合
      • 自製 DI 容器
        • 自製 DI 容器—2.0 版
        • 現成的 DI 容器
      • 物件組合
        • 使用 XML
        • 使用程式碼
        • 自動註冊
        • 自動匹配
        • 深層解析
      • 物件生命週期管理
        • 記憶體洩漏問題
        • 生命週期選項
      • 攔截
        • 使用 Decorator 模式實現攔截
      • 本章回顧
  • Part II:實戰篇
    • 第 4 章:DI 與 ASP.NET MVC 分層架構
      • 分層架構概述
        • Repository 模式
      • MVC 分層架構範例 V1-緊密耦合
        • 領域模型
        • 資料存取層
        • 應用程式層
        • 展現層
        • 審視目前設計
      • MVC 分層架構範例 V2-寬鬆耦合
        • 領域模型
        • 資料存取層
        • 應用程式層
        • 展現層
        • 組合物件
          • 切換 Controller 工廠
        • 審視目前設計
        • 避免過度設計
      • MVC 分層架構範例 V3-簡化一些
        • 資料存取層
        • 應用程式層
        • 展現層
        • 審視目前設計
        • 一個 HTTP 請求搭配一個 DbContext
      • ASP.NET MVC 5 的 IDependencyResolver
        • 實作自訂的 IDependencyResolver 元件
      • 本章回顧
    • 第 5 章:DI 與 ASP.NET Web API
      • ASP.NET Web API 管線
        • Controller 是怎樣建成的?
        • 注入物件至 Web API Controller
      • 抽換 IHttpControllerActivator 服務
        • 純手工打造
        • 使用 DI 容器:Unity
      • 抽換 IDependencyResolver 服務
        • IDependencyResolver 與 IDependencyScope
        • 純手工 DI 範例
          • 步驟 1:實作 IDependencyResolver 介面
          • 步驟 2:替換預設的型別解析器
        • 使用 DI 容器:Unity
        • 使用 DI 容器:Autofac
      • 本章回顧
    • 第 6 章:更多 DI 實作範例
      • 共用程式碼
      • DI 與 ASP.NET MVC 5
        • 練習:使用 Unity
          • Step 1:建立新專案
          • Step 2:設定 Unity 容器
          • Step 3:建立 Controller
      • DI 與 ASP.NET Web Forms
        • 問題描述
        • 解法
        • 練習:使用 Unity
          • Step 1:建立新專案
          • Step 2:註冊型別
          • Step 3:撰寫 HTTP Handler
          • Step 4:註冊 HTTP Handler
          • Step 5:撰寫測試頁面
        • 練習:使用 Unity 的 BuildUp 方法
        • 練習:使用 Autofac
          • Step 1:建立新專案
          • Step 2:註冊型別
          • Step 3:撰寫 HTTP Handler
          • Step 4:註冊 HTTP Handler
          • Step 5:撰寫測試頁面
      • DI 與 WCF
        • 問題描述
        • 解法
        • 練習:使用 Unity
          • Step 1:建立 WCF 服務
          • Step 2:撰寫自訂的 ServiceHostFactory
          • Step 3:撰寫自訂的 ServiceHost
          • Step 4:實作 IContractBehavior 介面
          • Step 5:實作 IInstanceProvider 介面
          • Step 6:設定 Unity 容器
          • Step 7:修改 Web.config
          • Step 8:撰寫用戶端程式
        • 練習:使用 Autofac.Wcf 套件
          • Step 1:建立 WCF 服務
          • Step 2:撰寫自訂的 ServiceHostFactory
          • Step 3:設定 Autofac 容器
          • Step 4:修改 Web.config
          • Step 5:撰寫用戶端程式
      • 本章回顧
  • Part III:工具篇
    • 第 7 章:Unity 學習手冊
      • Unity 快速入門
        • Hello, Unity!
        • 註冊型別對應
        • 註冊既有物件
        • 解析
          • 解析一個物件:Resolve
          • 具名註冊與解析
          • 解析多個物件:ResolveAll
        • 註冊與解析泛型
        • 檢查註冊
        • 使用組態檔來設定容器
          • Unity 組態檔基本格式
          • 載入組態檔設定
      • 註冊與解析-進階篇
        • 共用的範例程式
          • 情境
          • 設計
          • 程式碼
        • 自動註冊
          • 解決重複型別對應的問題
          • AllClasses 類別
          • WithMappings 類別
        • 自動匹配
          • 自動匹配規則
        • 手動匹配
          • 循環參考問題
        • 注入參數
        • 注入屬性
        • 延遲解析
          • 使用 Lazy<T>
          • 使用自動工廠
        • 注入自訂工廠
      • 物件生命週期管理
        • 預設的生命週期
        • 指定生命週期
          • Transient vs. Per-Resolve
          • Per-Request 生命週期
        • 階層式容器
        • 選擇生命週期管理員
      • 攔截
        • 使用 Unity 容器實現攔截
          • Step 1:加入 Unity 的攔截擴充套件
          • Step 2:實作攔截行為
          • Step 3:註冊攔截行為
      • 結語
    • 附錄一:DI 容器實務建議
      • 容器設定
        • 避免對同一個組件(DLL)重複掃描兩次或更多次
        • 使用不同類別來註冊不同用途的元件
        • 使用非靜態類別來建立與設定 DI 容器
        • 不要另外建立一個 DLL 專案來集中處理相依關係的解析
        • 為個別組件加入一個初始化類別來設定相依關係
        • 掃描組件時,盡量避免指定組件名稱
      • 生命週期管理
        • 優先使用 DI 容器來管理物件的生命週期
        • 考慮使用子容器來管理 Per-Request 類型的物件
        • 在適當時機呼叫容器的 Dispose 方法
      • 元件設計相關建議
        • 避免建立深層的巢狀物件
        • 考慮使用泛型來封裝抽象概念
        • 考慮使用 Adapter 或 Façade 來封裝 3rd-party 元件
        • 不要一律為每個元件定義一個介面
        • 對於同一層(layer)的元件,可依賴其具象型別
      • 動態解析
        • 盡量避免把 DI 容器直接當成 Service Locator 來使用
        • 考慮使用物件工廠或 Func<T> 來處理晚期繫結
    • 附錄二:初探 ASP.NET 5 的內建 DI 容器
      • 練習步驟
        • 步驟 1:建立專案
        • 步驟 2:加入必要組件
        • 步驟 3:將 Web API 元件加入 ASP.NET 管線
        • 步驟 4:加入 API Controller
        • 步驟 5:撰寫測試用的服務類別
        • 步驟 6:注入相依物件至 Controller 的建構函式
      • 結語
  • 備註

Bundles that include this book

.NET 相依性注入
.NET 本事-非同步程式設計
2 Books
$20.00
Regular Price
$16.00
優惠組合售價

關於作者

Michael Tsai
Michael Tsai

More than 10 years of software development and 12 .NET MVP awards (since 2007), interested in .NET development as well as writing and translating books (from English to Chinese).

著作:《C# 本事》、《.NET 本事:非同步程式設計》、《.NET 相依性注入》(簡體中文版:.NET 依賴注入)

譯作: 軟體構築美學 (Brownfield Application Development in .NET)、物件導向分析設計與應用(Object-Oriented Analysis and Design with Applications 3rd Edition)、軟體工程與 Microsoft Visual Studio Team System.

部落格: https://www.huanlintalk.com

關於出版社

This book is published on Leanpub by Ministep Books

Leanpub 無條件、無風險的 100% 滿意保證

付款之後的 45 天內,只要點個兩下,你就可以完成退書並且取回先前支付的全數金額。退書是採用人工作業,因此可能需要花幾天的時間才能完成整個程序。
See full terms.

在 Leanpub 上面寫作與出版

作者與出版社使用 Leanpub 來出版寫作中和已完成的書籍,就像這本書。你也可以用 Leanpub 來撰寫、出版、和銷售你的作品!Leanpub 是功能強大的平台,非常適合認真的作者。它結合了簡單、優雅的寫作與出版流程,以及一個可銷售寫作中的電子書的線上商店。Leanpub 對作家而言是個神奇打字機:只要編寫純文字,然後按個鈕就能出版你的電子書。真的就是這麼容易。

Learn more about writing on Leanpub