.NET 依赖注入
$13.00
最低售价
$17.00
建议价格

.NET 依赖注入

关于本书

本书内容是关于 .NET 相依性注入(dependency injection;简称 DI)的相关议题。透过本书,您将会了解:

  • 什么是 DI、它有什么优点、何时使用 DI、以及可能碰到的陷阱。
  • 如何运用 DI 应付容易变动的软件需求,设计出更弹性、更好维护的程序代码。
  • 与 DI 有关的设计模式。
  • DI 于 .NET 应用程序中的实务应用,包括 ASP.NET MVC、ASP.NET Web API 等等。
  • 如何使用 DI 容器(例如 Unity)来协助开发应用程序。

本书的范例皆以 C# 撰写,读者无须具备任何 DI 背景知识。

建议您先读完本书的试阅章节(包含本书第一章完整内容),以评估这本书是否适合你。

 

这本书是 .NET 相依性注入 的翻译,原文是用 繁體中文 写的,现在被翻译成 简体中文。

关于作者

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

目录

  •  
    • 致谢
    • 关于本书
      • 谁适合阅读本书
      • 如何阅读本书
      • 书写惯例
      • 需要准备的工具
      • 范例程序与补充材料
    • 关于作者
  • 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 的构造函数
      • 结语
  • 備註

关于出版社

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 上写作的信息