请解释在 .NET 应用程序中,依赖注入容器是如何负责对象的创建和生命周期管理的?
考察说明
考查对依赖注入容器生命周期管理机制的理解,包括不同生命周期选项及其适用场景。
回答思路
- 【回答框架 1】依赖注入容器通过注册服务类型和生命周期,控制对象的创建与释放,常见生命周期包括瞬态、作用域和单例。瞬态每次请求都创建新实例,适合轻量无状态服务;作用域在指定作用域内共享实例,如请求级;单例整个应用只创建一个实例,适合全局状态或昂贵资源。
- 【回答框架 2】在选择生命周期时需注意依赖关系,避免作用域或瞬态服务依赖于单例服务导致的捕获问题,以及单例依赖瞬态可能引发状态不一致。容器负责释放由其创建的对象,但若手动创建实例需自行处理释放。
- 【回答框架 3】使用容器时需遵循组合根模式,在应用入口集中注册服务,避免在业务代码中直接解析服务,以利于测试和维护。同时应避免使用服务定位器反模式,保持依赖注入的显式性。
- 【关键点 1】三种生命周期:瞬态、作用域、单例,各有适用场景。
- 【关键点 2】容器管理对象释放,但手动创建需自行处理。
- 【关键点 3】遵循组合根模式,避免服务定位器反模式。
- 【关键点 4】注意依赖关系,避免生命周期不匹配导致的潜在问题。
- 【易错点 1】将作用域服务注入单例服务会导致捕获问题。
- 【易错点 2】在业务代码中直接解析服务,破坏依赖注入设计。
- 【易错点 3】误用单例导致状态泄漏或并发问题。