[書訊]《.NET 依賴注入》 (2014-12-08 更新)
书 名:.NET 依赖注入
页 数:235
格 式:PDF、EPUB、MOBI
难易度:中阶至进阶
出版日期:2014 年 12 月 8 日
ISBN:9789574320684
简介
本书内容是关于 .NET 相依性注入(dependency injection;简称 DI)的相关议题。透过本书,您将会了解:
- 什么是 DI、它有什么优点、何时使用 DI、以及可能碰到的陷阱。
- 如何运用 DI 应付容易变动的软体需求,设计出更弹性、更好维护的程式码。
- 与 DI 有关的设计模式。
- DI 于.NET 应用程序中的实务应用(如 ASP.NET MVC、ASP.NET WEB API、WCF 等等)。
- 如何在应用程序中使用现成的 DI 框架来协助实现 DI。本书支持的 DI 框架主要是
Unity,部分章节有提供 Autofac 的范例(如第 5 章、第 6 章)。
本书的范例皆以 C# 撰写,读者无须具备任何 DI 背景知识。
【点我下载样章】
如何购买
您可以至下列平台购买(都有样章可以免费下载试阅):
- Leanpub: https://leanpub.com/dinet-s (建议採用! 先注册一个使用者账号,然后利用此账号来买书)
请注意:注册账号时填写的 e-mail 必须是有效的!这很重要,因为往后的书籍更新通知讯息都会发送到这个 e-mail 地址。 - Pubu:http://goo.gl/orzQRJ (中文用戶介面,support both online reading and download PDF/EPUB)
- SelfStore:https://selfstore.io/products/247 (功能比較阳春,好處是中文用戶介面)
购书时,您可在网页上自行调整价格滑动杆,以本书的最低价格结账。当然,如果您要给予作者更多鼓励,也可以直接用建议售价或更高的价钱来购买。
更新通知
订购此书时,只要有输入 e-mail 地址,将来有新版本发布时,您就会收到更新通知和下载连结。
Table of Content
序 关于本书 谁适合阅读本书 如何阅读本书 书写惯例 需要准备的工具 更新与支持 范例程序与补充材料 致谢 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 使用自动工厂 注入自定义工厂 对象生命周期管理 默认的生命周期 指定生命周期 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 来处理晚期绑定 附录二:初探 ASP.NET 5 的自带 DI 容器 练习步骤 步骤 1:建立项目 步骤 2:加入必要组件 步骤 3:将 Web API 组件加入 ASP.NET 管线 步骤 4:加入 API Controller 步骤 5:编写测试用的服务类型 步骤 6:注入相依对象至 Controller 的构造函数 结语
下载范例程式与补充资料
本书的完整范例程式与相关补充资料都放在 github 网站上。网址如下:
https://github.com/huanlin/di-book-support
意见反馈
如有任何疑问或建议,欢迎在此留言指教,或与作者本人联系。谢谢~
posted on 2014-08-17 01:15 MichaelTsai 阅读(3093) 评论(36) 编辑 收藏 举报