2010-04-29 111 views
1

我目前正試圖在代碼中移除一些.Resolve(s)。我一直很順利,直到我遇到了一個有名的註冊,並且我無法使用名稱獲得Autofac解決方案。我錯過了將註冊註冊到構造函數中。使用Autofac 2和名稱註冊的構造函數注入

註冊

builder.RegisterType<CentralDataSessionFactory>().Named<IDataSessionFactory>("central").SingleInstance(); 
builder.RegisterType<ClientDataSessionFactory>().Named<IDataSessionFactory>("client").SingleInstance(); 
builder.RegisterType<CentralUnitOfWork>().As<ICentralUnitOfWork>().InstancePerDependency(); 
builder.RegisterType<ClientUnitOfWork>().As<IClientUnitOfWork>().InstancePerDependency(); 

當前類

public class CentralUnitOfWork : UnitOfWork, ICentralUnitOfWork 
{ 
    protected override ISession CreateSession() 
    { 
     return IoCHelper.Resolve<IDataSessionFactory>("central").CreateSession(); 
    } 
} 

想有

public class CentralUnitOfWork : UnitOfWork, ICentralUnitOfWork 
{ 
    private readonly IDataSessionFactory _factory; 
    public CentralUnitOfWork(IDataSessionFactory factory) 
    { 
     _factory = factory; 
    } 

    protected override ISession CreateSession() 
    { 
     return _factory.CreateSession(); 
    } 
} 

回答

7

更改註冊手動進行解析:

builder.Register(c => new CentralUnitOfWork(c.Resolve<IDataSessionFactory>("central"))) 
    .As<ICentralUnitOfWork>() 
    .InstancePerDependency();