博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
autofac文档:服务类型,名称和键
阅读量:6070 次
发布时间:2019-06-20

本文共 1824 字,大约阅读时间需要 6 分钟。

AutoFac文档

目录

  1. 开始
  2. Registering components
  3. 控制范围和生命周期
  4. 用模块结构化Autofac
  5. xml配置
  6. 与.net集成
  7. 深入理解Autofac
  8. 指导
  9. 关于
  10. 词汇表

同一个服务的不同实现可以以类型,名称和键区分。

autofac提供三种典型的方式区分服务。

按类型

类型是描述服务的基本方法

builder.Register
().As
();

这个例子将IDeviceState 类型的服务和OnlineState 的component联系起来。可以用这个服务的类型来检索OnlineState的实例:

var r = container.Resolve
();

指定类型的服务在中也会起作用。

按名字

服务可以进一步按名字识别。使用这种技术时,用 Named()注册方法代替As():

builder.Register
().Named
("online");

使用 ResolveNamed()检索指定名字的服务:

var r = container.ResolveNamed
("online");

在之前的2.3版本中,ResolveNamed()只是Resolve()的简单重载。

指定名字的服务其实是指定键的服务的简单版本,所以在下一节讲到的技术也同样适用于指定名字的服务。

按键

在一些情况下使用字符串做component的名字很方便,但是在另外一些情况下我们需要使用其他类型做键。按键指定服务提供了这种机制。

比如,使用一个枚举来描述设备的不同状态

public enum DeviceState { Online, Offline }

每个枚举值对应一个服务的实现。

public class OnlineState : IDeviceState { }

可以像下面这样使用枚举值来做键

var builder = new ContainerBuilder();builder.RegisterType
().Keyed
(DeviceState.Online);builder.RegisterType
().Keyed
(DeviceState.Offline);// Register other components here

显式检索

可以使用ResolveKeye()进行显式检索。

var r = container.ResolveKeyed
(DeviceState.Online);

这么做导致容器被当做 Service Locator使用,这是不被推荐的。应该使用IIndex type替代。

在之前的2.3版本中, ResolveKeyed()只是Resolve()的简单重载。

使用索引检索

Autofac.Features.Indexed.IIndex<K,V>是autofac自动实现的一个关联类型。component可以使用IIndex<K,V>作为参数的构造函数从基于键的服务中选择需要的实现。

public class Modem : IHardwareDevice{    IIndex
_states; IDeviceState _currentState; public Modem(IIndex
states) { _states = states; SwitchOn(); } void SwitchOn() { _currentState = _states[DeviceState.Online]; }}

在SwitchOn方法中。使用索引从前面用DeviceState.Online做键注册的IDeviceState的实现。

转载于:https://www.cnblogs.com/wolegequ/archive/2012/06/03/2532605.html

你可能感兴趣的文章
Android进程的内存管理分析
查看>>
php -- 反射ReflectionClass
查看>>
Nginx反向代理和负载均衡部署指南
查看>>
java获取当前日期时间代码总结
查看>>
互联网广告学——程序化购买
查看>>
新版本chrome浏览器控制台怎么设置成独立的窗口
查看>>
oracle中nvarchar2字符集不匹配
查看>>
Mysql5.6.22源代码安装
查看>>
每天一个linux命令(5):rm 命令
查看>>
mksquash_lzma-3.2 编译问题
查看>>
【转帖】C# DllImport 系统调用使用详解 托管代码的介绍 EntryPoint的使用
查看>>
PHP JAVA Bridge桥的最新使用
查看>>
免费工具
查看>>
锋利的JQuery —— DOM操作
查看>>
Swift应用开源项目推荐
查看>>
BZOJ1845 : [Cqoi2005] 三角形面积并
查看>>
机器语言——码运算(具体解释反码补码由来)
查看>>
二维码的生成细节和原理
查看>>
关于B树的一些总结
查看>>
学习资料下载地址
查看>>