2010-04-29 3 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(); 
Смежные вопросы