AutoFac文档3(转载)
目录
- 开始
- Registering components
- 控制范围和生命周期
- 用模块结构化Autofac
- xml配置
- 与.net集成
- 深入理解Autofac
- 指导
- 关于
- 词汇表
服务类型,名称和键
同一个服务的不同实现可以以类型,名称和键区分。
autofac提供三种典型的方式区分服务。
按类型
类型是描述服务的基本方法
|
1
|
builder.Register<OnlineState>().As<IDeviceState>(); |
这个例子将IDeviceState 类型的服务和OnlineState 的component联系起来。可以用这个服务的类型来检索OnlineState的实例:
|
1
|
var r = container.Resolve<IDeviceState>(); |
指定类型的服务在自动装配中也会起作用。
按名字
服务可以进一步按名字识别。使用这种技术时,用 Named()注册方法代替As():
|
1
|
builder.Register<OnlineState>().Named<IDeviceState>("online"); |
使用 ResolveNamed()检索指定名字的服务:
|
1
|
var r = container.ResolveNamed<IDeviceState>("online"); |
在之前的2.3版本中,ResolveNamed()只是Resolve()的简单重载。
指定名字的服务其实是指定键的服务的简单版本,所以在下一节讲到的技术也同样适用于指定名字的服务。
按键
在一些情况下使用字符串做component的名字很方便,但是在另外一些情况下我们需要使用其他类型做键。按键指定服务提供了这种机制。
比如,使用一个枚举来描述设备的不同状态
|
1
|
public enum DeviceState { Online, Offline } |
每个枚举值对应一个服务的实现。
|
1
|
public class OnlineState : IDeviceState { } |
可以像下面这样使用枚举值来做键
|
1
2
3
4
|
var builder = new ContainerBuilder();builder.RegisterType<OnlineState>().Keyed<IDeviceState>(DeviceState.Online);builder.RegisterType<OfflineState>().Keyed<IDeviceState>(DeviceState.Offline);// Register other components here |
显式检索
可以使用ResolveKeye()进行显式检索。
|
1
|
var r = container.ResolveKeyed<IDeviceState>(DeviceState.Online); |
这么做导致容器被当做 Service Locator使用,这是不被推荐的。应该使用IIndex type替代。
在之前的2.3版本中, ResolveKeyed()只是Resolve()的简单重载。
使用索引检索
Autofac.Features.Indexed.IIndex<K,V>是autofac自动实现的一个关联类型。component可以使用IIndex<K,V>作为参数的构造函数从基于键的服务中选择需要的实现。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class Modem : IHardwareDevice{ IIndex<DeviceState, IDeviceState> _states; IDeviceState _currentState; public Modem(IIndex<DeviceState, IDeviceState> states) { _states = states; SwitchOn(); } void SwitchOn() { _currentState = _states[DeviceState.Online]; }} |
在SwitchOn方法中。使用索引从前面用DeviceState.Online做键注册的IDeviceState的实现。
AutoFac文档3(转载)的更多相关文章
- AutoFac文档(转载)
目录 开始 注册组件 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 开始 程序集 如果你正在使用Nuget包管理器,你可以通过 ...
- 使用swagger实现web api在线接口文档(转载)
一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...
- 如何从sun公司官网下载java API文档(转载)
相信很多同人和我一样,想去官网下载一份纯英文的java API文档,可使sun公司的网站让我实在很头疼,很乱,全是英文!所以就在网上下载了别人提供的下载!可是还是不甘心!其实多去看看这些英文的技术网站 ...
- AutoFac文档14(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 激活事件 在compo ...
- AutoFac文档13(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 属性注入 属性注入使用 ...
- AutoFac文档12(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 Resolve的参数 ...
- AutoFac文档11(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 元数据 Autofac ...
- AutoFac文档10(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 循环依赖 循环依赖是指 ...
- AutoFac文档9(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 关系类型 Autofa ...
- AutoFac文档8(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 泛型 给定一个开放的泛 ...
随机推荐
- pytest文档7-pytest-html生成html报告
前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github. ...
- 关于linux的进程中的各个线程cpu占用情况的分析和查看
我们常常会在新开的服搭建一个游戏的server,有时候要进行压力測试,那么怎样来看呢,一般我们会通过top命令查看各个进程的cpu和内存占用情况,获得到了我们的进程id,然后我们或许会通过pstack ...
- [转] 上级向的十个iOS面试问题
上级向的十个iOS面试问题 转自 http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术 ...
- linux远程连接
1.使用putty连接 putty下载地址 http://www.putty.org/ 2.通过VNC连接 vnc_viewer 下载地址 http://www.realvnc.com/downloa ...
- sscanf %*s
一次在源码里看到 %*s 的格式,从未见过百思不得其解,今天用google的code搜索,搜到一些使用范例,猜测%*s 是说这里有一些字符,长度不一定,按正则表达式的习惯,*代办任意非负整数.例如: ...
- 移动端的emoji表情符号插入MySQL数据库失败
插入数据时候报了错:### Error updating database. Cause: Java.sql.SQLException: Incorrect string value: ‘\xF0\x ...
- Android -- Activity的销毁和重建
两种销毁 第一种是正常的销毁,比如用户按下Back按钮或者是activity自己调用了finish()方法: 另一种是由于activity处于stopped状态,并且它长期未被使用,或者前台的acti ...
- Android -- Service的开启关闭与生命周期
Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity ...
- windows下读取Linux分区软件
导读 ext3等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.etx4也是Linux下的日志型文件系统,被设计作为ext3的继任者.他消除了64位存储限制,是 ...
- JWT token心得
token的组成 token串的生成流程. token在客户端与服务器端的交互流程 Token的优点和思考 参考代码:核心代码使用参考,不是全部代码 JWT token的组成 头部(Header),格 ...