书 名:.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


关于本书
谁适合阅读本书
如何阅读本书
书写惯例
需要准备的工具
更新与支持
范例程序与补充材料
致谢
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

意见反馈

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

[書訊]《.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. 【27.66%】【codeforces 592D】Super M

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. WebHost failed to process a request.Memory gates checking failed because the free memory (140656640 bytes) is less than 5% of total memory

    WebHost failed to process a request. Sender Information: System.ServiceModel.ServiceHostingEnvironme ...

  3. ik_max_word ik_smart

    打开 ~/es_root/config/elasticsearch.yml 文件,加入以下配置: index: analysis: analyzer: ik_syno: type: custom to ...

  4. matlab 高阶(三)—— 插值(fft、)

    1. FFT 插值 y = interpft(x,n) y = [0, .5, 1., 1.5, 2., 1.5, 1., .5, 0, -.5, -1, -1.5, -2., -1.5, -1., ...

  5. Python Numpy基础教程

    Python Numpy基础教程 本文是一个关于Python numpy的基础学习教程,其中,Python版本为Python 3.x 什么是Numpy Numpy = Numerical + Pyth ...

  6. 使用bcc32做在windowXP上qt3.2.1编译环境的配置

    1.安装borland C++编译器,编译器文件所在目录下的文件如下: 其中bcc32.cfg和ilink32.cfg文件是自己加进去的,bcc32.cfg内容是-I"C:\Borland\ ...

  7. OpenGl(二)点线设置、多边形镂空

    1. 改变点的大小 OpenGL中默认点的大小是1个像素,使用函数glPointSIze可以调整点的大小,入参是GLfloat,相当于是浮点数. 相关代码: void myDisplay(void) ...

  8. 潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据

    原文:潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据 目前自己对treeview的感慨很多 今天先讲 面对这种 表结构的数据 的其中 ...

  9. 自定义 DependencyProperty 与 RoutedEvent

    原文:自定义 DependencyProperty 与 RoutedEvent //自定义依赖属性 class MyBook : DependencyObject//依赖属性必须派生自Dependen ...

  10. 获取 UIElement 相对于屏幕原点所占用的矩形区域

    原文:获取 UIElement 相对于屏幕原点所占用的矩形区域 <Grid Background="Transparent"> <StackPanel Margi ...