我这里的情况看起来很像 NHibernate 世界中的“SELECT N+1”。
我正在创建一个应用程序 ASP.NET MVC 应用程序,而HomeController需要一个IUserSignUpService。IUserSignUpService “存在”在应用程序服务层中,它绑定到具体类UserSignUpService。
UserSignUpService 有 2 个依赖项:
public IUserRepository UserRepository { get; set; }
public Domain.Services.IUserSignUpService SignUpService { get; set; }
public UserSignUpService(IUserRepository userRepository, Domain.Services.IUserSignUpService signUpService)
{
this.UserRepository = userRepository;
this.SignUpService = signUpService;
}
当 Autofac 解析位于应用程序服务层中的IUserSignUpService时,它需要解析位于持久层中的IUserRepository依赖项和位于域并在执行 INSERT SQL 到数据库之前执行几个操作。
IUserRepository接口由 UserRepository 类实现,该类需要通过构造函数注入ISession实例。
我的观点是:
如果我继续使用这种方法,每次我收到 HomeController 的 HttpRequest 时,我都会启动一个新的 ISession(因为它是 UserRepository 的构造函数依赖项,它是 IUserSignUpController 的构造函数依赖项,它是 HomeController 的构造函数依赖项) .
我不需要每次都需要。也许我可以指示 Autofac 仅在当前 LifeTimeScope 中有 IUnitOfWork 接口的实例时才解析 ISession。
是否可以?