Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么要在依赖注入中进行反射?_C#_Dependency Injection - Fatal编程技术网

C# 为什么要在依赖注入中进行反射?

C# 为什么要在依赖注入中进行反射?,c#,dependency-injection,C#,Dependency Injection,我正在学习依赖注入。我理解为什么在开发大型应用程序时它至关重要的基本原因 依赖注入似乎使用反射来实现它的一些目标。对我来说,反射似乎是一种逆向工程 反射使用的原因和方式以及它是可选的吗?依赖注入是一种设计模式,在大多数OO语言中都有很好的语言支持。如果在构造函数中定义了类型所需的依赖项,则在构造函数中创建该类型时会获得编译时支持,也就是说,如果将错误的类型传递到构造函数中,则不会编译该类型 您的困惑可能是因为您认为依赖项注入库(使用反射)是强制性的,但是。我甚至认为,当开始使用DI时,对于小型应

我正在学习依赖注入。我理解为什么在开发大型应用程序时它至关重要的基本原因

依赖注入似乎使用反射来实现它的一些目标。对我来说,反射似乎是一种逆向工程

反射使用的原因和方式以及它是可选的吗?

依赖注入是一种设计模式,在大多数OO语言中都有很好的语言支持。如果在构造函数中定义了类型所需的依赖项,则在构造函数中创建该类型时会获得编译时支持,也就是说,如果将错误的类型传递到构造函数中,则不会编译该类型

您的困惑可能是因为您认为依赖项注入库(使用反射)是强制性的,但是。我甚至认为,当开始使用DI时,对于小型应用程序,您应该在不使用此类库的情况下开始,因为编译器提供的帮助将给您带来巨大的好处


当应用程序增长时,就需要使用DI库,因为它可以显著降低对合成根目录的维护量。这样做时,您将失去编译时支持。因此,您应该选择一个DI库来补偿编译时支持的损失(其中一些包含验证和诊断功能)您还需要添加一些集成测试,以便验证配置的正确性,以弥补编译时支持的损失。

关于依赖项注入,您还有很多需要了解的内容。依赖注入用于避免对象之间的耦合。你不必使用反射来实现它。它可以像将一个对象传递到另一个对象的属性一样简单。为什么依赖项注入需要语言级别的支持?为什么语言应该支持一个特定的约定?这个问题只会引出意见,而不是事实。“语言对我们需要的功能没有明确的支持”,比如“我在代码中只使用
string
int
,因为像
List
DateTime
这样的类不受C#的直接支持”?反射(检查和代码生成)是.Net框架的自然组成部分-那么为什么不使用它呢?我同意Darek的观点。关于依赖注入,我有很多东西要学。谢谢你的评论。谢谢你澄清我的错误。