внедрение конструктора с использованием Autofac 2 и именованной регистрации

В настоящее время я пытаюсь удалить ряд .Resolve(s) в нашем коде. Я двигался нормально, пока не столкнулся с именованной регистрацией, и мне не удалось получить разрешение Autofac, используя имя. Чего мне не хватает, чтобы ввести именованную регистрацию в конструктор.

Регистрация

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

person Thad    schedule 29.04.2010    source источник


Ответы (1)


Измените регистрацию, чтобы выполнить разрешение вручную:

builder.Register(c => new CentralUnitOfWork(c.Resolve<IDataSessionFactory>("central")))
   .As<ICentralUnitOfWork>()
   .InstancePerDependency();
person Peter Lillevold    schedule 29.04.2010