C# 每个激活实例的Autofac begin lifetimescope

C# 每个激活实例的Autofac begin lifetimescope,c#,.net,dependency-injection,inversion-of-control,autofac,C#,.net,Dependency Injection,Inversion Of Control,Autofac,给定以下代码: 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{} 接口IDep

给定以下代码:

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{}
接口IDep{}
职系主任:IDep
{
公共部门副主任(分区办事处){…}
}
主班:伊曼
{
公共Main(){}
公共IEnumerable依赖项{get;set}
}

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

您可以通过将ISub注册为InstancePerLiveTimeScope并手动控制IMain instance的生命周期来实现这一点。示例代码:

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>();
}
var builder=newcontainerbuilder();
builder.RegisterType().As().InstancePerDependence();
builder.RegisterType().As().InstancePerDependence();
builder.RegisterType();
var container=builder.Build();
使用(var lifetimeScope=container.BeginLifetimeScope())
{
var main=lifetimeScope.Resolve();
}