2013-09-27 26 views
0

考虑下面的代码:Autofac开始lifetimescope每激活例如

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

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

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