AutoFac文档11(转载)
目录
- 开始
- Registering components
- 控制范围和生命周期
- 用模块结构化Autofac
- xml配置
- 与.net集成
- 深入理解Autofac
- 指导
- 关于
- 词汇表
元数据
Autofac提供机制去创建和使用component的元数据
如果你熟悉Managed Extensibility Framework (MEF) ,你很可能已经见过component元数据的例子。
元数据是存储component中的关于这个component的信息,不需要创建实例也能访问。
在注册的时候添加元数据
值描述的元数据在注册阶段和component联系起来,每个元数据都是一个键值对:
|
1
2
3
|
builder.Register(c => new ScreenAppender()).As<ILogAppender>() .WithMetadata("AppenderName", "screen"); |
用XML文件可以表示为
|
1
2
3
4
5
6
7
|
<component type="MyApp.Components.Logging.ScreenAppender, MyApp" service="MyApp.Services.Logging.ILogAppender, MyApp" > <metadata> <item name="AppenderName" value="screen" type="System.String" /> </metadata></component> |
使用元数据
不用于一般的属性,元数据和component本身是相互独立额度。
这使得在运行条件下从很多component中选择一个时非常有用,或者元数据不是component实例的固有属性时。元数据可以表述ITask 执行的时间,或者实现了ICommand的按钮标题。
另外一些component可以使用通过Meta 使用元数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Log{ readonly IEnumerable<Meta<ILogAppender>> _appenders; public Log(IEnumerable<Meta<ILogAppender>> appenders) { _appenders = appenders; } public void Write(string destination, string message) { var appender = _appenders.First(a => a.Metadata["AppenderName"].Equals( destination)); appender.Value.Write(message); }} |
可以像下面那样通过使用 Meta<Lazy>或者the .NET 4 Lazy<T, TMetadata>,不创建component的也可以访问元数据。
强类型的元数据
为了防止使用字符串来描述元数据,可以为每条元数据指定一个可读的属性,通过继承IAppenderMetadata:
|
1
2
3
4
|
public interface IAppenderMetadata{ string AppenderName { get; }} |
在注册时,可以使用WithMetadata 的重载方法去关联值:
|
1
2
|
builder.Register(c => new ScreenAppender()).As<ILogAppender>().WithMetadata<IAppenderMetadata>(m => m.For(am => am.AppenderName, "screen")); |
(这里有一个更高级的例子)
在NET4.0中,autofac支持 Meta<T, TMetadata> 和System.Lazy<T, TMetadata> 冲强类型接口中读取值。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Log{ readonly IEnumerable<Lazy<ILogAppender, ILogAppenderMetadata>> _appenders; public Log(IEnumerable<Lazy<ILogAppender, ILogAppenderMetadata>> appenders) { _appenders = appenders; } public void Write(string destination, string message) { var appender = _appenders.First(a => a.Metadata.AppenderName == destination); appender.Value.Write(message); }} |
注意强类型属性AppenderName的使用
注册和使用元数据是分开的,所以你可以通过弱类型技术来使用强类型的元数据,反之亦然。
注意:Autofac1.4版本中, "extended properties"就是元数据,这个特征已经被元数据代替。
AutoFac文档11(转载)的更多相关文章
- AutoFac文档(转载)
目录 开始 注册组件 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 开始 程序集 如果你正在使用Nuget包管理器,你可以通过 ...
- ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/ 谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...
- 使用swagger实现web api在线接口文档(转载)
一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
- 如何从sun公司官网下载java API文档(转载)
相信很多同人和我一样,想去官网下载一份纯英文的java API文档,可使sun公司的网站让我实在很头疼,很乱,全是英文!所以就在网上下载了别人提供的下载!可是还是不甘心!其实多去看看这些英文的技术网站 ...
- AutoFac文档10(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 循环依赖 循环依赖是指 ...
- AutoFac文档3(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 服务类型,名称和键 同 ...
- AutoFac文档14(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 激活事件 在compo ...
- AutoFac文档13(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 属性注入 属性注入使用 ...
随机推荐
- google支付回调验证
原文链接: https://my.oschina.net/lemonzone2010/blog/398736 Google支付问题 20150218,挂机的日本服务器出现google支付被刷单现象,虽 ...
- matlab strel
>>se3 = strel('square',3)Neighborhood: 1 1 1 1 1 1 1 1 1 >> se3 = strel('line',3 , 45)Ne ...
- Java多线程学习(吐血超具体总结)
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书 ...
- 数学图形(2.2)N叶结
上一节讲的三叶结,举一反三,由三可到无穷,这一节讲N叶结 再次看下三叶结的公式: x = sin(t) + 2*sin(2*t)y = cos(t) - 2*cos(2*t) 将其改为: x = si ...
- C# 7-Zip Executable
7-Zip can be used in C# programs. It provides excellent compression ratios. We embed the 7-Zip comma ...
- k-means聚类算法C++实现
原文:http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069594.html Clustering 中文翻译作“聚类”,简单地说就是把相似的东 ...
- Redis数据类型--List
Redis列表是简单的字符串列表,依照插入顺序排序. 你能够加入一个元素到列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素到头部, RPUSH插入一个新元素到尾部. 当一个这两个操 ...
- [多校2015.02.1006 高斯消元] hdu 5305 Friends
题意: 给你n个人m条关系 每条关系包括a,b 代表a和b能够是线上朋友也能够是线下朋友 然后保证每一个人的线上朋友数和线下朋友数相等 问你有多少种组成方法 思路: 官方题解是爆搜+剪枝,然而并不会写 ...
- 用thinkphp连接mysql数据库
一.设置mysql数据库的参数 thinkphp\Application\Home\Conf\config.php <?php return array( //'配置项'=>'配置值' ' ...
- RMSE均方根误差学习笔记
1.均方根误差,它是观测值与真值偏差的平方和观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替.方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方 ...