1

現在、コード内のいくつかの.Resolveを削除しようとしています。名前付き登録に遭遇するまで順調に進んでいましたが、名前を使用して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();
    }
}
4

1 に答える 1

7

登録を変更して、手動で解決します。

builder.Register(c => new CentralUnitOfWork(c.Resolve<IDataSessionFactory>("central")))
   .As<ICentralUnitOfWork>()
   .InstancePerDependency();
于 2010-04-29T19:56:18.337 に答える