编辑:我正在学习依赖注入。我理解在开发大型系统时它至关重要的基本原因。
似乎依赖注入使用反射来实现其一些目标。反思是一种逆向工程(可能只对我而言)。
如果有人解释为什么以及如何使用Reflection以及它是否是可选的,那将对我非常有帮助。
答案 0 :(得分:11)
依赖注入是一种设计模式,在大多数OO语言中具有相当好的语言支持。如果在构造函数中定义类型需要的依赖项,则在Composition Root中创建该类型时会获得编译时支持,即如果将错误的类型传入构造函数,则无法编译。
您的困惑可能是因为您认为使用依赖注入库(使用反射)是强制性的。 It isn't我甚至认为,从DI开始,对于小型应用程序,你应该从没有这样的库开始,因为编译器的帮助会给你带来很大的好处。
当应用程序增长时,您可能希望切换到使用DI库,因为它可以显着降低组合根的维护量。执行此操作时,您将失去编译时支持。因此,您应该选择一个可以弥补编译时支持丢失的DI库(其中一些包含验证和诊断功能),您需要添加一些集成测试,以便验证配置的正确性以弥补损失编译时支持。