autofac文档:关系类型

AutoFac文档

目录

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

关系类型

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

组合关系类型

关系类型可以被组合使用,所以:

1
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

posted @   Iyy  阅读(3656)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示