书 名:.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 背景知识。

点我下载样章

如何购买

您可以至下列平台购买(都有样章可以免费下载试阅):

购书时,您可在网页上自行调整价格滑动杆,以本书的最低价格结账。当然,如果您要给予作者更多鼓励,也可以直接用建议售价或更高的价钱来购买。

更新通知

订购此书时,只要有输入 e-mail 地址,将来有新版本发布时,您就会收到更新通知和下载连结。

Table of Content


  1. 关于本书
  2. 谁适合阅读本书
  3. 如何阅读本书
  4. 书写惯例
  5. 需要准备的工具
  6. 更新与支持
  7. 范例程序与补充材料
  8. 致谢
  9. Part I:基础篇
  10. 1 章:导论
  11. 为什么需要 DI
  12. 可维护性
  13. 宽松耦合
  14. 可测试性
  15. 平行开发
  16. 什么是 DI
  17. 入门范例—非 DI 版本
  18. 入门范例—DI 版本
  19. 提炼接口(Extract Interface
  20. 控制反转(IoC
  21. 何时该用 DI
  22. 本章回顾
  23. 2 章:DI 用法与模式
  24. 设计模式梗概
  25. 小引-电器与接口
  26. Null Object 模式
  27. Decorator 模式
  28. Composite 模式
  29. Adapter 模式
  30. Factory 模式
  31. 注入方式
  32. 构造函数注入
  33. 已知应用例
  34. 用法
  35. 范例程序
  36. 属性注入
  37. 已知应用例
  38. 用法
  39. 范例程序
  40. 方法注入
  41. 已知应用例
  42. 用法
  43. 范例
  44. Ambient Context 模式
  45. 已知应用例
  46. 范例程序(一)
  47. 范例程序(二)
  48. Service Locator 模式
  49. 过犹不及-再谈构造函数注入
  50. 半吊子注入
  51. 阻止相依蔓延
  52. 解决「半吊子注入」
  53. 过度注入
  54. 重构成参数对象
  55. 重载构造函数
  56. 重构成 Façade 模式
  57. 本章回顾
  58. 3 章:DI 容器
  59. DI 容器简介
  60. 对象组合
  61. 自制 DI 容器
  62. 自制 DI 容器—2.0
  63. 现成的 DI 容器
  64. 对象组合
  65. 使用 XML
  66. 使用代码
  67. 自动注册
  68. 自动匹配
  69. 深层解析
  70. 对象生命周期管理
  71. 内存泄漏问题
  72. 生命周期选项
  73. 拦截
  74. 使用 Decorator 模式实现拦截
  75. 本章回顾
  76. Part II:实战篇
  77. 4 章:DI ASP.NET MVC 分层架构
  78. 分层架构概述
  79. Repository 模式
  80. MVC 分层架构范例 V1-紧密耦合
  81. 领域模型
  82. 数据访问层
  83. 应用层
  84. 表示层
  85. 检视目前设计
  86. MVC 分层架构范例 V2-宽松耦合
  87. 领域模型
  88. 数据访问层
  89. 应用层
  90. 表示层
  91. 组合对象
  92. 切换 Controller 工厂
  93. 检视目前设计
  94. 避免过度设计
  95. MVC 分层架构范例 V3-简化一些
  96. 数据访问层
  97. 应用层
  98. 表示层
  99. 检视目前设计
  100. 一个 HTTP 请求搭配一个 DbContext
  101. ASP.NET MVC 5 IDependencyResolver
  102. 实现自定义的 IDependencyResolver 组件
  103. 本章回顾
  104. 5 章:DI ASP.NET Web API
  105. ASP.NET Web API 管线
  106. Controller 是怎样建成的?
  107. 注入对象至 Web API Controller
  108. 抽换 IHttpControllerActivator 服务
  109. 纯手工打造
  110. 使用 DI 容器:Unity
  111. 抽换 IDependencyResolver 服务
  112. IDependencyResolver IDependencyScope
  113. 纯手工 DI 范例
  114. 步骤 1:实现 IDependencyResolver 接口
  115. 步骤 2:替换默认的类型解析器
  116. 使用 DI 容器:Unity
  117. 使用 DI 容器:Autofac
  118. 本章回顾
  119. 6 章:更多 DI 实现范例
  120. 共享代码
  121. DI ASP.NET MVC 5
  122. 练习:使用 Unity
  123. Step 1:建立新项目
  124. Step 2:设定 Unity 容器
  125. Step 3:建立 Controller
  126. DI ASP.NET Web Forms
  127. 问题描述
  128. 解法
  129. 练习:使用 Unity
  130. Step 1:建立新项目
  131. Step 2:注册类型
  132. Step 3:编写 HTTP Handler
  133. Step 4:注册 HTTP Handler
  134. Step 5:编写测试页面
  135. 练习:使用 Unity BuildUp 方法
  136. 练习:使用 Autofac
  137. Step 1:建立新项目
  138. Step 2:注册类型
  139. Step 3:编写 HTTP Handler
  140. Step 4:注册 HTTP Handler
  141. Step 5:编写测试页面
  142. DI WCF
  143. 问题描述
  144. 解法
  145. 练习:使用 Unity
  146. Step 1:建立 WCF 服务
  147. Step 2:编写自定义的 ServiceHostFactory
  148. Step 3:编写自定义的 ServiceHost
  149. Step 4:实现 IContractBehavior 接口
  150. Step 5:实现 IInstanceProvider 接口
  151. Step 6:设定 Unity 容器
  152. Step 7:修改 Web.config
  153. Step 8:编写客户端程序
  154. 练习:使用 Autofac.Wcf 套件
  155. Step 1:建立 WCF 服务
  156. Step 2:编写自定义的 ServiceHostFactory
  157. Step 3:设定 Autofac 容器
  158. Step 4:修改 Web.config
  159. Step 5:编写客户端程序
  160. 本章回顾
  161. Part III:工具篇
  162. 7 章:Unity 学习手册
  163. Unity 快速入门
  164. Hello, Unity!
  165. 注册类型对应
  166. 注册现有对象
  167. 解析
  168. 解析一个对象:Resolve
  169. 具名注册与解析
  170. 解析多个对象:ResolveAll
  171. 注册与解析泛型
  172. 检查注册
  173. 使用配置文件来设定容器
  174. Unity 配置文件基本格式
  175. 加载配置文件设定
  176. 注册与解析-进阶篇
  177. 共享的范例程序
  178. 情境
  179. 设计
  180. 代码
  181. 自动注册
  182. 解决重复类型对应的问题
  183. AllClasses 类型
  184. WithMappings 类型
  185. 自动匹配
  186. 自动匹配规则
  187. 手动匹配
  188. 循环参考问题
  189. 注入参数
  190. 注入属性
  191. 延迟解析
  192. 使用 Lazy
  193. 使用自动工厂
  194. 注入自定义工厂
  195. 对象生命周期管理
  196. 默认的生命周期
  197. 指定生命周期
  198. Transient vs. Per-Resolve
  199. Per-Request 生命周期
  200. 阶层式容器
  201. 选择生命周期管理员
  202. 拦截
  203. 使用 Unity 容器实现拦截
  204. Step 1:加入 Unity 的拦截扩展包
  205. Step 2:实现拦截行为
  206. Step 3:注册拦截行为
  207. 结语
  208. 附录一:DI 容器实务建议
  209. 容器设定
  210. 避免对同一个组件(DLL)重复扫描两次或更多次
  211. 使用不同类型来注册不同用途的组件
  212. 使用非静态类型来建立与设定 DI 容器
  213. 不要另外建立一个 DLL 项目来集中处理依赖关系的解析
  214. 为个别组件加入一个初始化类型来设定依赖关系
  215. 扫描组件时,尽量避免指定组件名称
  216. 生命周期管理
  217. 优先使用 DI 容器来管理对象的生命周期
  218. 考虑使用子容器来管理 Per-Request 类型的对象
  219. 在适当时机调用容器的 Dispose 方法
  220. 组件设计相关建议
  221. 避免建立深层的巢状对象
  222. 考虑使用泛型来封装抽象概念
  223. 考虑使用 Adapter Façade 来封装 3rd-party 组件
  224. 不要一律为每个组件定义一个接口
  225. 对于同一层(layer)的组件,可依赖其具象类型
  226. 动态解析
  227. 尽量避免把 DI 容器直接当成 Service Locator 来使用
  228. 考虑使用对象工厂或 Func 来处理晚期绑定
  229. 附录二:初探 ASP.NET 5 的自带 DI 容器
  230. 练习步骤
  231. 步骤 1:建立项目
  232. 步骤 2:加入必要组件
  233. 步骤 3:将 Web API 组件加入 ASP.NET 管线
  234. 步骤 4:加入 API Controller
  235. 步骤 5:编写测试用的服务类型
  236. 步骤 6:注入相依对象至 Controller 的构造函数
  237. 结语

下载范例程式与补充资料

本书的完整范例程式与相关补充资料都放在 github 网站上。网址如下:
https://github.com/huanlin/di-book-support

意见反馈

如有任何疑问或建议,欢迎在此留言指教,或与作者本人联系。谢谢~

[書訊]《.NET 依賴注入》 (2014-12-08 更新)的更多相关文章

  1. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  2. app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...

  3. app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)

    在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面. (1)最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间. (2)短信方面 以前我 ...

  4. Android应用开发相关下载资源(2014/12/14更新)

    官方终于发布了Android Studio正式版,Android Studio将会成为推荐使用的主要Android开发工具. (1)Android SDK (Android SDK主安装包,包含SDK ...

  5. 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)

    0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...

  6. LAMP开发之环境搭建(2014.12.7在ubuntu下)

    Ubuntu下搭建LAMP环境 前言:学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我搭建的是LAMP环境,即Linux.Apache ...

  7. 依賴注入入門——Unity(一)

    參考資料http://blog.csdn.net/m13666368773/article/details/7802126 背景介紹 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...

  8. 依賴注入入門——Unity(二)

    參考博客文章http://www.cnblogs.com/kebixisimba/category/130432.html http://www.cnblogs.com/qqlin/tag/Unity ...

  9. [MVC学习日记]2014/12/01 初步认识MVC模型。

    2014/12/011.初步认识MVC模型.MVC模式是一种表现模式.它将web应用程序分成三个部分,模型(Model).视图(View).控制器(Controller).Model:是实现业务逻辑层 ...

  10. 更新日志(建议升级到2016.12.17) && 更新程序的方法

    更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

随机推荐

  1. Service熟人

    Service 为一体的四个分量间(剩余有Activity ,内容提供商,广播),它属于后台工作,能够在后台很长一段时间执行,他没有接口. 首先从使用方式上来说来说 他有两种使用方式: 1.启动式使用 ...

  2. FreeBSD 内核中的SYSINIT分析【转】

    FreeBSD kernel是一个膨大的系统, 对于这样一个大系统, 里面往往包含了大量的子系统和  模块,当系统初始化时这些模块就需要初始化, 按照通常的思路,这些初始化过程必须在某处  被显式地调 ...

  3. asp.net中c#求百分比

    double m= 50;double n= 100; Response.Write((m/ (m+ n)).ToString("0%"));Response.Write((m/ ...

  4. win7 64位系统下进入debug

    win7 64位无法直接通过命名行输入debug命令的方式进入到debug,好在我们可是使用一个工具DOSbox来进入debug.操作步骤如下:1.下载DOSbox进行安装.下载地址:点击打开链接.如 ...

  5. 数学类网站、代码(Matlab & Python & R)

    0. math & code COME ON CODE ON | A blog about programming and more programming. 1. 中文 统计学Computa ...

  6. ios7 左右searchbar在设置cancelButton的title属性

    经 [searchBarsetShowsCancelButton:YES];设置之后默认是"cancel",想改为中文的 在stackoverflow上參考了非常多方法都没用 这里 ...

  7. WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制

    原文:WPF MVVM模式中,通过命令实现窗体拖动.跳转以及显隐控制 在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到 ...

  8. 制作一个简单的WPF图片浏览器

    原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1.  对指定文件夹下所有JPG文件进行预览2.  对选定图片进行旋转3.  对选定图片 ...

  9. WPF中Polyline拐角的bug

    原文:WPF中Polyline拐角的bug       Polyline绘制折线在小角度(比如几度)的时候会出现不连续的现象,形成拐角的两条线段中有一段会超出,角度越小越明显.       问题如下图 ...

  10. Android 4.0屏蔽式多点触摸

    比方这张图.我想不接或者接单,二者仅仅能点一个,不能同一时候点击,否则会造成混乱.我们仅仅要在嵌套他们俩的布局中增加这么一段话: android:splitMotionEvents="fal ...