目录

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

服务类型,名称和键

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

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(转载)的更多相关文章

  1. AutoFac文档(转载)

    目录 开始 注册组件 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 开始 程序集 如果你正在使用Nuget包管理器,你可以通过 ...

  2. 使用swagger实现web api在线接口文档(转载)

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  3. 如何从sun公司官网下载java API文档(转载)

    相信很多同人和我一样,想去官网下载一份纯英文的java API文档,可使sun公司的网站让我实在很头疼,很乱,全是英文!所以就在网上下载了别人提供的下载!可是还是不甘心!其实多去看看这些英文的技术网站 ...

  4. AutoFac文档14(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 激活事件 在compo ...

  5. AutoFac文档13(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 属性注入 属性注入使用 ...

  6. AutoFac文档12(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 Resolve的参数 ...

  7. AutoFac文档11(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 元数据 Autofac ...

  8. AutoFac文档10(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 循环依赖 循环依赖是指 ...

  9. AutoFac文档9(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 关系类型 Autofa ...

  10. AutoFac文档8(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 泛型 给定一个开放的泛 ...

随机推荐

  1. JAVA EE 博客实例

    http://www.cnblogs.com/hoojo/category/276244.html

  2. Windows平台下如何使用Android NDK

    鉴于有些同学想要学习NDK,但在网上很难找到一个讲解比较清楚.按照步骤操作可以比较顺利学会NDK的文章,所以写了此篇教程. 一.学习本篇教程需要具备的条件: 1. 了解JAVA中JNI的概念.好处以及 ...

  3. springboot 选择启动某个配置文件

    选择启动某个配置文件 Spring Boot配置文件提供了隔离一部分应用程序配置的方法,并可使其仅在某指定环境可用.任何有@Component和@Configuration注解的Bean都用@prof ...

  4. 为Hadoop创建JAR包文件Creating a JAR for Hadoop

    We've seen the internals of MapReduce in the last post. Now we can make a little change to the WordC ...

  5. 盗COOKIE之方法总结

    1.xss跨站盗cookie 2.ajax跨域盗cookie 3.hosts文件映射 对于第一种方法,首先:在有跨站漏洞的页面贴上跨站代码如: <script>window.open('h ...

  6. Qt Creator的安装与Qt交叉编译的配置

    Qt Creator 的安装 到Qt官网下载Qt Creator  https://www.qt.io/download-open-source/ 其它旧版本点击Achieve连接下载 或登录http ...

  7. 修改url地址参数

    使用changeURLPar('http://www.baidu.com?page=2&bb=cc','page',10) 得到结果http://www.baidu.com?page=10&a ...

  8. ps与top命令简单介绍

    Linux中ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或 ...

  9. (顺序表应用5.1.1)POJ 3750 小孩报数问题(基本的约瑟夫环问题:给出人数n,出发位置w,间隔数s)

    /* * POJ_3750.cpp * * Created on: 2013年10月30日 * Author: Administrator */ #include <iostream> # ...

  10. Makefile 编译静态库

    CC = gcc AR = ar FLAGS = -Wall -lpthread CLOUD = cloud_server OBJ += cloud_server.o LIB = libccloud. ...