我目前正在尝试在代码中删除一些.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();
Run Code Online (Sandbox Code Playgroud)
现在的课程
public class CentralUnitOfWork : UnitOfWork, ICentralUnitOfWork
{
protected override ISession CreateSession()
{
return IoCHelper.Resolve<IDataSessionFactory>("central").CreateSession();
}
}
Run Code Online (Sandbox Code Playgroud)
想拥有
public class CentralUnitOfWork : UnitOfWork, ICentralUnitOfWork
{
private readonly IDataSessionFactory _factory;
public CentralUnitOfWork(IDataSessionFactory factory)
{
_factory = factory;
}
protected override ISession CreateSession()
{
return _factory.CreateSession();
}
}
Run Code Online (Sandbox Code Playgroud)
更改注册以手动执行解析:
builder.Register(c => new CentralUnitOfWork(c.Resolve<IDataSessionFactory>("central")))
.As<ICentralUnitOfWork>()
.InstancePerDependency();
Run Code Online (Sandbox Code Playgroud)