给出以下代码:
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的“单个实例”。
答案 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>();
}