Silverstripe在Injector中查找类,以便可以通过依赖注入覆盖类

时间:2016-05-31 22:03:08

标签: php silverstripe

根据Silverstripe文件:

  

使用create()方法提供可链接性,可以为您的代码增添优雅和简洁,例如:球员::创建() - →写()。但更重要的是,它会在Injector中查找类,以便可以通过依赖注入覆盖类。

有人可以解释一下“它会在Injector中查找类,以便可以通过依赖注入覆盖类”吗?

2 个答案:

答案 0 :(得分:4)

我想你可能指的是这个:

Injector:
  MyClass1:
    class: MyClass2

上面的YML配置代码段会告诉Injector(几乎所有SS'对象都被实例化)在调用MyClass2时使用MyClass1代替MyClass1::create()

答案 1 :(得分:1)

当您的Player类依赖于AnotherClass时,最好将AnotherClass的实例传递给Player。您可以在此处详细了解:What is dependency injection?

SilverStripe内置依赖注入解决方案:Injector Class。见https://docs.silverstripe.org/en/3.3/developer_guides/extending/injector/

因此,当你调用Player::create();时,SilverStripe将查找要使用的正确类(默认为Player类,但可以使用配置文件覆盖),创建一个新实例,注入其依赖项并将其返回给您

如果您是SilverStripe的新手,您可能会忽略所有这些。