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 的"单个实例"。
您可以通过将 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>();
}