ContainerBuilder构建
代码片段
var builder = new ContainerBuilder();
builder.RegisterType<ConsoleOutput>().As<IOutput>();
是Autofac中的核心操作,分别完成了两件事:创建容器构建器,以及注册服务与实现的映射关系
简单来说,就像是在一个“服务目录”里登记一条记录:“当有人需要 IOutput 这个能力时,请提供 ConsoleOutput 这个具体实现”
- var builder = new ContainerBuilder();
- 作用:创建一个 ContainerBuilder 实例。它相当于一个配置中心,用于注册所有组件、服务和它们之间的依赖关系
- 后续动作:在完成所有注册后,需要调用 builder.Build() 来生成最终的容器(IContainer),这个容器才是真正用来解析服务的
- builder.RegisterType
().As ();
- 这行代码使用了链式调用,可以拆分为两个核心操作来看:
- RegisterType
() - 告诉容器:“我想注册 ConsoleOutput 这个类”。
- 这个类的实例,将由容器在需要时负责创建
- .As
() - 指定了这个注册的服务类型(即接口)是 IOutput
- 它建立了一个映射:当代码请求 IOutput 接口时,容器就返回一个 ConsoleOutput 的实例。
- RegisterType
可以把这想象成在招聘一个岗位:
| 代码部分 | 业务含义 | 类比 |
|---|---|---|
| RegisterType |
让容器知晓 ConsoleOutput 这个类的存在,并准备好创建它 | “我们认可 ConsoleOutput 这个求职者具备工作能力” |
| .As |
将这个类与它实现的接口 IOutput 绑定起来 | “以后部门需要 IOutput 岗位的人时,就直接安排 ConsoleOutput 上岗” |
// 1. 创建构建器并注册服务
var builder = new ContainerBuilder();
builder.RegisterType<ConsoleOutput>().As<IOutput>();
// 2. 构建容器
var container = builder.Build();
// 3. 从容器中解析服务
using (var scope = container.BeginLifetimeScope())
{
// 实际使用时,你只会面向 IOutput 接口编程,而不关心具体实现
var output = scope.Resolve<IOutput>();
output.Write("Hello, Autofac!"); // 实际执行的是 ConsoleOutput 的 Write 方法
}

浙公网安备 33010602011771号