Autofac 开始每个激活实例的生存期范围

本文关键字:生存期 范围 实例 激活 开始 Autofac | 更新日期: 2023-09-27 18:32:56

给定以下代码:

interface IMain {}
interface ISub {}
interface IDep {}
class Dep : IDep
{
    public Dep(ISub sub) { ... }
}
class Main : IMain
{
     public Main() {}
     public IEnumerable<IDep> Dependencies {get;set}
}

如何将容器配置为每个 IMain 实例有一个 ISub 实例。因此,如果我从容器解析 IMain 实例,则会为该 IMain 对象创建 ISub 的"单个实例"。

Autofac 开始每个激活实例的生存期范围

您可以通过将 ISub 注册为 InstancePerLifetimeScope 并手动控制 IMain instace 的 Lifetimescope 来实现此目的。示例代码:

var builder = new ContainerBuilder();
builder.RegisterType<Main>().As<IMain>().InstancePerDependency();
builder.RegisterType<Dep>().As<IDep>().InstancePerDependency();
builder.RegisterType<Sub>().As<ISub>().InstancePerLifetimeScope();
var container = builder.Build();
using (var lifetimeScope = container.BeginLifetimeScope())
{
    var main = lifetimeScope.Resolve<IMain>();
}