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 指导 关于 词汇表 泛型 给定一个开放的泛 ...
随机推荐
- 虚拟机安装android
通过 虚拟机VirtualBox安装Android x86 4.0系统. Android x86是一个致力于让android运行在x86架构机器上的民间组织搞的项目,目前在世界上有很多人加入了它,虽然 ...
- .NET:CLR via C# The CLR’s Execution Model
The CLR’s Execution Model The core features of the CLR memory management. assembly loading. security ...
- 第十章 OPENWRT安装nohup,因为不明原因nohup没有安装
Available pacaagess里找了coreutils-nohup包,安装好就行了 运行nohup自己的程序的时候可能会出现一下: root@OpenWrt:~# nohup: ignorin ...
- Matlab中下标,斜体,及希腊字母的使用方法
下面是Matlab官方列出来的Tex代码列表,包含了绝大部分的希腊字母和数学符号. Character Sequence Symbol Character Sequence Symbol Charac ...
- win7 64位的 svchost.exe 占用内存过大的问题
svchost.exe 是用来启动系统服务的,所以某个 svchost.exe 占用内存过大,可能就是它启动的那个服务占用内存过大,所以只要停止并禁用那个服务就行了. 一般来说占用内存最大的服务是 S ...
- python with和上下文管理工具
对于系统资源如文件.数据库连接.socket 而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源. 比如 Python 程序打开一个文件,往文件中写内容,写完之后, ...
- 硬件加速 Hardware Accelerated 绘制
官方文档中对硬件加速的描述 原文地址:http://developer.android.com/guide/topics/graphics/hardware-accel.html Beginning ...
- poj 1260 Pearls 斜率优化dp
这个题目数据量很小,但是满足斜率优化的条件,可以用斜率优化dp来做. 要注意的地方,0也是一个决策点. #include <iostream> #include <cstdio> ...
- mysql查找数据库中是否已经存在某张表
Sql: select count(*) from information_schema.TABLES t where t.TABLE_SCHEMA ="数据库名" and t.T ...
- C#基础视频教程7.3 如何编写简单游戏
前面我们大致实现了鸟的一圈轨迹(其实如果你不做这个,就用两个矩形块的碰撞检测代替也可以),跟所有前面的教程一样,草稿打完了就要设计封装成一个类.至少到目前为止我们已经知道了鸟的属性和方法,先不要管方法 ...