autofac文档:关系类型
AutoFac文档
目录
- 开始
- Registering components
- 控制范围和生命周期
- 用模块结构化Autofac
- xml配置
- 与.net集成
- 深入理解Autofac
- 指导
- 关于
- 词汇表
关系类型
Autofac提供拆箱即用的关系类型。
Autofac会对下面列出的关系类型特别解释。下面列出的每一种关系类型,Autofac都会在需要的时候提供一种默认实现。
比如说,当Autofac会 IEnumerable 类型的构造函数参数进行注入时,它不会寻找提供 IEnumerable 的component,而是容器会找出所有的ITasks实现然后全部注入。
(你可以显示注册这些类型的实现来覆盖默认行为)
Relationship |
Type |
Meaning |
A needs B |
B |
Dependency |
A needs B at some point in the future |
Lazy<B> |
Delayed instantiation |
A needs B until some point in the future |
Owned<B> |
Controlled lifetime |
A needs to create instances of B |
Func<B> |
Dynamic instantiation |
A provides parameters of types X and Y to B |
Func<X,Y,B> |
Parameterisation |
A needs all the kinds of B |
IEnumerable<B> |
Enumeration |
A needs to know X about B |
Meta<T> and Meta<B,X> |
Metadata interrogation |
A needs to choose B based on X |
IIndex<X,B> |
Lookup |
组合关系类型
关系类型可以被组合使用,所以:
IEnumerable<Func<Owned<ITask>>>
上面这行代码将向下面这样被解释:
- 属性所有的实现
- 返回一个工厂
- 生命周期被控制
- ITask服务
标准的类型组合
.NET Type |
Equivalent to |
Lazy<T,M> |
Meta<Lazy<T>, M> |
ExportFactory<T> |
Func<Owned<T>> |
ExportFactory<T,M> |
Meta<Func<Owned<T>>> |
注意, ExportFactory 类型包含在Silverlight4中而不是.NET中,所以还不被Autofac支持
关系类型和容器的独立性
Autofac中自定义的容器类型不会强迫你将程序紧紧的和Autofac绑在一起。它们会为容器配置提供一种一致的编程模型,和你写其他component一样
例如,你仍然可以创建一个自定义的ITaskFactory ,但是如果有需要的话你可以提供基于 Func<Owned>实现的AutofacTaskFactory