0

我这里的情况看起来很像 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。

是否可以?

4

1 回答 1

2

测试是否为不构造 ISession 做额外的工作是过早的优化。是否有显着的性能影响?

如果是这样,您可以将“每次都不需要”的任何构造函数依赖包装在 Lazy<> 中,Autofac 将延迟实例化

于 2012-06-27T03:05:14.880 回答