我们有一个 ASP.NET MVC 应用程序,它使用 IoC 将服务引用注入控制器并将存储库引用注入服务。
控制器必须具有瞬态生命周期,因为它们必须根据请求进行实例化。但是,如果每个请求都更新整个 IoC 堆栈,那么这会产生一些开销。我们有比我想要的更多的依赖关系,一种选择是拥有更多的控制器,每个控制器在堆栈中的依赖关系更少。但是,暂且不谈,我的问题是,如果作为单例注入的对象具有具有短暂生命周期的依赖项,那么这些依赖项是否会因为被单例所拥有而本质上被视为单例?
具体来说,如果我们有以下
RepositoryA(需要是瞬态的,因为当前设计在构造函数中注入了用户上下文) ServiceA(单例) ControllerA(瞬态)
像这样实例化:
public ServiceA(IRepositoryA repo) {}
public ControllerA(IServiceA service) {}
RepositoryA 本质上会被实例化一次,因为 ServiceA 被实例化了一次吗?
我 99% 肯定答案是肯定的,但只是想确认我必须在这里进行的重构量。
此外,假设服务和存储库没有任何用户/请求特定的实例变量,作为一种设计方法,是否有任何理由不为它们使用单例生命周期?