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 指导 关于 词汇表 属性注入 属性注入使用 ...
随机推荐
- 如何屏蔽PHP浏览器头信息X-Powered-By
将 php.ini 中,将 “expose_php = On” 改为 “expose_php = Off”
- SpringBoot添加支持CORS跨域访问
原文:https://www.jianshu.com/p/c6ea21b64f6e CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W ...
- Android 新浪博客分享问题总结
分类: android(33) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 我遇到BUG 1 sso package or singn error Bug2 ...
- 2017年USNews美国大学研究生专业排名
2017年USNEWS美国大学研究生专业排名最佳商学院排名 排名 学校 费用 注册人数 #1 Harvard University Boston, MA $61,225 per year (full- ...
- ASP.NET 5 Beta5 对TagHelper带来的变化
最近做的TagHelper项目要从原来的ASP.NET 5 Beta 4升级到Beta 5,特地整理了升级后的变化: 新增ImageTagHelper <img asp-file-version ...
- @Redis Desktop Manager无法连接虚拟机中启动的redis服务问题解决
Redis Desktop Manager下载地址 https://redisdesktop.com/download 安装好以后连接linux服务器上的Redis服务器错误: 问题排查: 1.检查R ...
- RTF文件合并 备忘
多个独立的rtf文件合并时,如果文件纸张方向存在横向 纵向不一致时,文件之间需要插入分节符 \pard \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspa ...
- WEB漏洞挖掘技术总结
漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化.在前期针对缓冲区溢出.格式化字符串.堆溢出.lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE ...
- hadoop常见问题总结1
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-problem1.html,转载请注明源地址. 问题1:http://localhost:50030 H ...
- html input type=date 赋值问题 必须yyyy-mm-dd格式
type=date ,日期类型默认格式是yyyy-mm-dd 因此必须给该控件赋值yyyy-mm-dd格式的数据 错误的赋值 <input type="date" id=&q ...