我理解依赖注入原理就是解耦代码。而不是制作new类中的实例,而不是注入它们,这使得它们
松散耦合。
现在,如果我必须传递一组将在整个应用程序中的多个类中使用的对象,我可以创建一个容器(通常称为依赖项注入容器)。
这正是我正在做的事情,因为我必须传递一个配置对象、一个记录器对象、一个翻译器对象等,这些对象将通过我的应用程序的几个类实例使用。我将整个容器传递给几个类,即使并非所有类都需要访问容器内的所有对象。这让我想到了以下问题:如果我创建一个全局注册表并将对象放入其中,然后像Registry::getInstance()->get('logger'); 那样检索它们,有什么区别? ?无论我使用全局注册表还是依赖项容器,类实例都可以访问容器或注册表中的所有对象,即使它们不需要查看/访问所有对象。
结论:如果我沿着我的类或全局注册表传递依赖项注入容器,有什么区别?
Note: sometimes people use Registries by different names. The common ones that i have seen as: Locator, Context and System.
使用全局注册表会导致您的代码与所述注册表的类名绑定。这意味着您无法独立测试您的代码。注册表的设置方式对您来说是谎言:您永远无法知道需要哪个实例。
人们很容易将 DI 容器与注册表混淆。
DI 容器不是注入到类中的东西。相反,它是工厂的增强:它决定了该类Foo
需要实例Bar
被注入到构造函数中。然后,根据设置,它要么获取新的实例Bar
或者使用现有的依赖项来提供所述依赖项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)