kirov-opensource / NAutowired

ASP.NET CORE Field Injection Implement
MIT License
77 stars 16 forks source link

refactor: 重构依赖解析方法。取消递归并增加类型成员缓存,消除在大量依赖和循环依赖下的性能问题。 #38

Open softworm opened 4 months ago

softworm commented 4 months ago
  1. 解决了部分场景下的性能问题。

实际使用中随着服务越来越多,依赖越来越复杂,逐渐产生了Autowired注入耗时过长问题——72个内部相互依赖的服务,注入时间达到1500ms。(虽然这样依赖并不合理 :smile: )

经过排查优化,消除了递归解析与递归验证实例存在的方式,同样场景下注入时间减少至个位数。

  1. 循环依赖的判定规则进行调整

原逻辑为上层路径的实例与当前类型匹配则复用(GetInstance);现调整为绝对相等才可复用instaceSet.Contains

假设有 IBiz 继承 IBase,那么原来由IBiz得到的实例可以给IBase复用;现在解析为两个对象,与官方GetService<T>保持一致。

希望大佬审阅,择机发版 :smile: