You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActivatorUtilities.CreateInstance<T>与new T()在MAUI依赖注入中的区别

ActivatorUtilities.CreateInstance vs new 实例化的区别
  • 依赖自动解析能力
    若PersonRepository的构造函数后续新增其他依赖项(比如ILogger<PersonRepository>),使用ActivatorUtilities.CreateInstance<PersonRepository>(s, dbPath)时,框架会自动从传入的服务容器s中查找并注入这些额外依赖;而用new PersonRepository(dbPath)的话,你必须手动在代码里添加新参数,否则会编译报错。

  • DI容器生命周期集成
    通过ActivatorUtilities创建的实例,会和传入的服务容器s的生命周期管理绑定。比如容器内的依赖是Scoped生命周期时,实例能正确复用这些依赖;直接new的实例完全脱离DI容器,无法利用容器的生命周期机制。

  • 代码灵活性与维护性
    当构造函数参数发生变化时,使用ActivatorUtilities的代码无需修改(只要新依赖已注册到容器);而new的写法必须同步修改实例化代码,维护成本更高。

  • 测试场景适配
    单元测试中,你可以通过替换服务容器里的注册项来模拟依赖;如果用new,则需要手动构造所有依赖的模拟实例,测试代码会更繁琐。

内容的提问来源于stack exchange,提问作者Bongo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:20:26