我已经阅读了几天关于依赖注入/控制反转的内容,并且正在努力理解一个概念。
假设我有以下简单的场景:
public interface ILocation
{
string LocationName { get; set; }
}
// The implementation / concrete class for ILocation
public class Location : ILocation
{
public string LocationName {
get { /* logic */ }
set { /* logic */ }
}
}
// My class that depends on ILocation as a dependency
public class SomeClass{
public SomeClass(ILocation location)
{
this.theLocation = location;
}
//
// more code...
//
}
太好了,所以我将我的ILocation
注入到我的SomeClass
......但我必须在我的依赖注入框架ILocation
中处理并编译它。Location
(旁白:我意识到有些框架可以在文件中进行此配置,即 XML 配置文件)
当上面列出的所有组件都必须在编译时存在时,创建这种知识“分离”的意义何在?
这真是折磨我。也许我完全错过了重点。现在,话虽这么说,我确实看到很多人谈论“可测试性”,我可以看到那里的优势,但是让我们假设我们将测试抛到了窗外;还有什么优点?这真的给了我什么?
我最初寻找这个概念是为了了解更多信息,希望能找到一种为我正在构建的应用程序设计“插件”模式的好方法。到目前为止,这似乎不适用于运行时插件的概念。
期待有关该主题的见解-谢谢!