kitlau
kitlau

kitlau's blog

DependencyInjection


还在背依赖注入的概念?不如自己写一个依赖注入框架

文章通过构建一个简易的DI框架KDI演示了依赖注入的核心原理,重点对比了Singleton和Transient两种生命周期的行为差异。实现过程中通过Guid测试验证了Singleton在多次获取时返回相同实例,Transient则每次生成新实例。作者同时指出控制台应用中若未使用CreateScope方法,Scoped服务可能表现出与Singleton相似的特性,但通过显式创建Scope可验证Scoped实际会在不同作用域生成独立实例。最后批判了应试教育对编程学习的负面影响,强调通过实践理解技术本质的重要性,并指出Singleton服务在特定场景下可能表现出实例差异的复杂情况。--Qwen3

.NET DependencyInjection Dependency Injection Service Lifecycles Software Engineering Design Patterns

你真的需要 Autofac 吗?Scrutor:更轻量的容器伴侣

本文探讨了在ASP.NET Core项目中使用Autofac作为依赖注入容器的必要性,针对仅依赖其程序集扫描注册功能或装饰器模式的场景提出了替代方案。文章指出,当项目广泛采用ServiceLocator反模式时,Autofac的引入可能带来不必要的复杂性和维护成本——这种全局静态访问服务的方式会导致代码耦合度高、测试困难且缺乏可扩展性,而ASP.NET Core默认DI容器已能通过构造函数注入实现更清晰的依赖管理。作者推荐使用Scrutor这一轻量级扩展库作为替代方案,其通过程序集扫描、命名空间过滤、接口匹配、生命周期标记等机制,以更简洁的代码实现批量注册服务。Scrutor支持通过属性标记或接口继承的方式精确控制服务的注册行为,并提供装饰器模式支持等高级功能,例如通过`AddClasses().AsMatchingInterface().WithSingletonLifetime()`实现生命周期管理。文章强调当项目仅需要扫描注册或装饰器功能时,Scrutor的轻量特性使其成为比Autofac更优的选择。最后抛出关键问题:您的项目是否真的需要Autac?是否在无意中依赖了ServiceLocator反模式?这些反思将帮助开发者重新评估现有架构的设计合理性。--Qwen3

.NET DependencyInjection ServiceLocator BatchRegistration DecoratorPattern LightweightLibrary

  • 1