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

.NET 相依性注入

使用 Unity

關於本書

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

本書內容是關於.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 章完整內容),以評估這本書是否適合你。 

關於作者

Michael Tsai
Michael Tsai

Hi there! I'm a technical writer with 10+ years of experience in software development and 16 awards of Microsoft .NET MVP.

著作:《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

本書也包含在這些優惠組合裡:

$27.50
分開購買
$20.50
優惠組合售價
$37.95
分開購買
$28.80
最低售價
$34.00
建議售價

目錄

  •  
    • 致謝
    • 關於本書
      • 誰適合閱讀本書
      • 如何閱讀本書
      • 書寫慣例
      • 需要準備的工具
      • 範例程式與補充資料
      • 版本更新紀錄
    • 關於作者
  • 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 生命週期
        • 階層式容器
        • 選擇生命週期管理員
      • 攔截
        • InterfaceInterceptor 範例
          • 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 的建構函式
      • 結語
    • 版權頁
  • 備註

關於出版社

This book is published on Leanpub by Ministep Books

Leanpub 100% 無風險的滿意保證

付款後的 60 天內,只要點擊兩下,你就可以退書並獲得全額退款。退書是手工操作的,所以可能需要幾天時間來完成整個過程。
查看完整條款.

80% 的版稅。在一本 20 美元的書上賺取 16 美元。

我們支付 80% 的版稅。這不是打字錯誤:你在20美元的銷售中賺取16美元。如果我們賣出5000本你的書或課程的非退款副本,每份20美元,你將賺取80,000美元

(是的,有些作者在Leanpub上已經賺了比這更多。)

事實上,作者已經通過在Leanpub上寫作、出版和銷售賺取了超過1200萬美元

了解更多有關在Leanpub上寫作的資訊

免費更新。無 DRM 限制。

如果你購買了 Leanpub 的書,只要作者更新書籍,你就可以獲得免費更新!許多作者使用 Leanpub 來發布他們正在編寫的書籍。所有讀者都可以獲得免費更新,無論他們何時購買書籍或支付了多少費用(包括免費)。

大多數 Leanpub 書籍均提供 PDF(適用於電腦)、EPUB(適用於手機和平板電腦)和 MOBI(適用於 Kindle)格式。書籍包含的格式將顯示在此頁面的右上角。

最後,Leanpub 書籍沒有任何 DRM 複製保護的胡說,因此你可以輕鬆地在任何支持的設備上閱讀它們。

了解更多有關 Leanpub 電子書格式和閱讀位置的資訊

在 Leanpub 上寫作和出版

作家和出版社使用 Leanpub 來出版正在進行中和已完成的書籍,就像這本書一樣。您也可以使用 Leanpub 來撰寫、出版和銷售您的書籍!Leanpub 是一個強大的平台,適合嚴肅的作家。它結合了簡單、優雅的寫作和出版工作流程,以及一個可以銷售正在進行中的電子書的線上商店。對於作家來說,Leanpub 是一部神奇的打字機:您只需撰寫純文字,然後點擊一下按鈕就可以出版您的電子書。就是這麼簡單。

了解更多有關 Leanpub 上的寫作