[書訊]《.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" " ...
随机推荐
- hive 日志配置/表头配置
1.日志配置,拷贝hive/conf下的hive-log4j2.properties.template为hive-log4j2.properties,修改日志目录,接下来在创建hive/logs,目录 ...
- webpack run dev后并没有生成dist目录,但是浏览器里却读取了dist里的build.js?
最近想看看现在做的React项目用的脚手架,看了下webpack的配置,尝试修改一些东西看看输出结果,结果允许npm run dev发现没有输出目录,怎么回事呢.又安装了vue官方提供的webpack ...
- 保护SSD,设置Chrome浏览器临时文件夹到ramdisk分区
很多用低端/山寨SSD的朋友都用Ramdisk来保护硬盘,一般都把系统temp目录和IE浏览器临时文件夹目录设到Ramdisk分区了. 最近用谷歌的chrome浏览器,发现浏览网页时候硬盘灯 ...
- yii2.0预先处理方法
public function beforeAction($action){ return $action; }
- 5 wcf双工
1 创建两个项目 Wcf_WsDual_Service Wcf_WsDual_Client 2 Wcf_WsDual_Service 项目中创建 LoginService.cs 的wcf文件 ...
- Fiddler教程(Web调试工具)
转载地址:写得很不错的fildder教程 http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler的官方网站: www.fiddler2.c ...
- Kitto2 now with free opensource Kide2 since September 2017(提供Web解决方案,大概是觉得Mobile开发快差不多了)
Kitto2 is a tool for data-driven web application Development. It allows to create Rich Internet Appl ...
- WPF 图形绘制 及各种线帽、箭头的实现
原文:WPF 图形绘制 及各种线帽.箭头的实现 /// <summary> /// 矩形类 /// </summary> public sealed ...
- C类型和存储方式的语言变量
变量的作用域:有效射程变量 >局部变量 1.在函数中的局部变量,量在该函数结束后自己主动撤销 2.函数内的复合语句中的局部变量(比方for语句),这个变量在复合语句结束后自己主动撤销.这个变量能 ...
- Altera公司高速PCB布线指南
来至Altera公司的高速PCB布线指南,该文档言简意赅,深入浅出,对于日常高速PCB布局布线中经常碰到的一些问题进行了解析.例如:板材的选择,介电常数及损耗因子对高速高频线路的影响,传输线,阻抗控制 ...