Autofac每个激活的实例开始生命周期

时间:2013-09-27 07:22:56

标签: 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实例。因此,如果我从容器中解析出一个IMain实例,就会为该IMain对象创建一个ISub的“单个实例”。

1 个答案:

答案 0 :(得分:1)

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

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>();
}