如果当前LifeTimeScope中有另一个组件,我该如何才能解析组件?

时间:2012-06-27 02:59:18

标签: .net dependency-injection autofac

我的情况看起来非常像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。

有可能吗?

1 个答案:

答案 0 :(得分:2)

测试不构建ISession的额外工作是否过早优化。是否有明显的性能?

如果是这样,你可以在Lazy<>中包装你“每次都不需要”的构造函数依赖项。和Autofac will delay instantiation