2013-09-27 25 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>(); 
}