0

给定以下代码:

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 的“单个实例”。

4

1 回答 1

1

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

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>();
}
于 2013-09-27T14:58:22.010 回答