根据Silverstripe文件:
使用create()方法提供可链接性,可以为您的代码增添优雅和简洁,例如:球员::创建() - →写()。但更重要的是,它会在Injector中查找类,以便可以通过依赖注入覆盖类。
有人可以解释一下“它会在Injector中查找类,以便可以通过依赖注入覆盖类”吗?
答案 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的新手,您可能会忽略所有这些。