[書訊]《.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
意见反馈
如有任何疑问或建议,欢迎在此留言指教,或与作者本人联系。谢谢~
[書訊]《.NET 依賴注入》 (2014-12-08 更新)的更多相关文章
- [原创] 【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 ...
- app后端设计(11)-- 系统架构(2014.12.05更新)
个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...
- app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)
在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面. (1)最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间. (2)短信方面 以前我 ...
- Android应用开发相关下载资源(2014/12/14更新)
官方终于发布了Android Studio正式版,Android Studio将会成为推荐使用的主要Android开发工具. (1)Android SDK (Android SDK主安装包,包含SDK ...
- 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)
0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...
- LAMP开发之环境搭建(2014.12.7在ubuntu下)
Ubuntu下搭建LAMP环境 前言:学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我搭建的是LAMP环境,即Linux.Apache ...
- 依賴注入入門——Unity(一)
參考資料http://blog.csdn.net/m13666368773/article/details/7802126 背景介紹 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...
- 依賴注入入門——Unity(二)
參考博客文章http://www.cnblogs.com/kebixisimba/category/130432.html http://www.cnblogs.com/qqlin/tag/Unity ...
- [MVC学习日记]2014/12/01 初步认识MVC模型。
2014/12/011.初步认识MVC模型.MVC模式是一种表现模式.它将web应用程序分成三个部分,模型(Model).视图(View).控制器(Controller).Model:是实现业务逻辑层 ...
- 更新日志(建议升级到2016.12.17) && 更新程序的方法
更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...
随机推荐
- Service熟人
Service 为一体的四个分量间(剩余有Activity ,内容提供商,广播),它属于后台工作,能够在后台很长一段时间执行,他没有接口. 首先从使用方式上来说来说 他有两种使用方式: 1.启动式使用 ...
- FreeBSD 内核中的SYSINIT分析【转】
FreeBSD kernel是一个膨大的系统, 对于这样一个大系统, 里面往往包含了大量的子系统和 模块,当系统初始化时这些模块就需要初始化, 按照通常的思路,这些初始化过程必须在某处 被显式地调 ...
- asp.net中c#求百分比
double m= 50;double n= 100; Response.Write((m/ (m+ n)).ToString("0%"));Response.Write((m/ ...
- win7 64位系统下进入debug
win7 64位无法直接通过命名行输入debug命令的方式进入到debug,好在我们可是使用一个工具DOSbox来进入debug.操作步骤如下:1.下载DOSbox进行安装.下载地址:点击打开链接.如 ...
- 数学类网站、代码(Matlab & Python & R)
0. math & code COME ON CODE ON | A blog about programming and more programming. 1. 中文 统计学Computa ...
- ios7 左右searchbar在设置cancelButton的title属性
经 [searchBarsetShowsCancelButton:YES];设置之后默认是"cancel",想改为中文的 在stackoverflow上參考了非常多方法都没用 这里 ...
- WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制
原文:WPF MVVM模式中,通过命令实现窗体拖动.跳转以及显隐控制 在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到 ...
- 制作一个简单的WPF图片浏览器
原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1. 对指定文件夹下所有JPG文件进行预览2. 对选定图片进行旋转3. 对选定图片 ...
- WPF中Polyline拐角的bug
原文:WPF中Polyline拐角的bug Polyline绘制折线在小角度(比如几度)的时候会出现不连续的现象,形成拐角的两条线段中有一段会超出,角度越小越明显. 问题如下图 ...
- Android 4.0屏蔽式多点触摸
比方这张图.我想不接或者接单,二者仅仅能点一个,不能同一时候点击,否则会造成混乱.我们仅仅要在嵌套他们俩的布局中增加这么一段话: android:splitMotionEvents="fal ...