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 インスタンスごとに 1 つの 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 に答える