ContainerBuilder构建

代码片段

  var builder = new ContainerBuilder();
  builder.RegisterType<ConsoleOutput>().As<IOutput>();

是Autofac中的核心操作,分别完成了两件事:创建容器构建器,以及注册服务与实现的映射关系
简单来说,就像是在一个“服务目录”里登记一条记录:“当有人需要 IOutput 这个能力时,请提供 ConsoleOutput 这个具体实现”

  1. var builder = new ContainerBuilder();
  • 作用:创建一个 ContainerBuilder 实例。它相当于一个配置中心,用于注册所有组件、服务和它们之间的依赖关系
  • 后续动作:在完成所有注册后,需要调用 builder.Build() 来生成最终的容器(IContainer),这个容器才是真正用来解析服务的
  1. builder.RegisterType().As();
  • 这行代码使用了链式调用,可以拆分为两个核心操作来看:
    • RegisterType()
      • 告诉容器:“我想注册 ConsoleOutput 这个类”。
      • 这个类的实例,将由容器在需要时负责创建
    • .As()
      • 指定了这个注册的服务类型(即接口)是 IOutput
      • 它建立了一个映射:当代码请求 IOutput 接口时,容器就返回一个 ConsoleOutput 的实例。

可以把这想象成在招聘一个岗位:

代码部分 业务含义 类比
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 方法
}
posted @ 2026-09-09 19:54  是17阿哥呀  阅读(11)  评论(0)    收藏  举报