我的情况看起来非常像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 依赖关系和域.Services.IUserSignUpService (我知道,同名,但它们不同)存在于Domain中,并在对数据库执行INSERT SQL之前执行多个操作。
IUserRepository 接口由 UserRepository 类实现,该类需要通过构造函数注入 ISession 实例。
我的观点是:
如果我继续使用这种方法,每次我收到HomeController的HttpRequest时,我都要启动一个新的ISession(因为它是UserRepository的构造函数依赖,这是对IUserSignUpController的构造函数依赖,这是一个构造函数依赖HomeController)。
我不是每次都需要一切。也许我可以指示Autofac仅在当前LifeTimeScope中存在IUnitOfWork接口的实例时解析ISession。
有可能吗?
答案 0 :(得分:2)
测试不构建ISession的额外工作是否过早优化。是否有明显的性能?
如果是这样,你可以在Lazy<>中包装你“每次都不需要”的构造函数依赖项。和Autofac will delay instantiation。