如何在 SilverStripe 中使用自定义 class 注入作为框架一部分的接口
How to inject an interface that is part of the framework using custom class in SilverStripe
我正在从事 SilverStripe 项目。 SilverStripe 项目版本为 4.4.4。在我的项目中,我试图替换为接口注入的 class 。接口和 class 都是框架的一部分。
在框架代码中,有如下class
class NaturalFileIDHelper implements FileIDHelper
如您所见,NaturalFileIDHelper 正在实现 FileIDHelper 接口。我想要做的是,我想用我的客户 class 替换所有 NaturalFileIDHelper 实例,称为 CustomFileIDHelper class,它也实现了 FileIDHelper 接口。
这就是我所做的。
我创建了一个名为 CustomFileIDHelper 的自定义 class,它实现了 FileIDHelper 接口。
然后我在 mysite.yml.
中添加了以下代码片段
SilverStripe\Assets\FilenameParsing\FileIDHelper:
class: CustomFileIDHelper
然后我重建项目。但是我的项目还在使用框架自带的NaturalFileIDHelperclass。似乎没有使用 CustomFileIDHelper class。
我怎样才能让它工作?可以吗?
I want to replace all the NaturalFileIDHelper
instances with my customer class called CustomFileIDHelper
class
如果您想替换所有 NaturalFileIDHelper
个实例,那么您应该覆盖 class(而不是 FileIDHelper
)。此外,您拥有的 .yml
配置需要传递给 Injector
。 (https://docs.silverstripe.org/en/4/developer_guides/extending/injector/)
SilverStripe\Core\Injector\Injector:
SilverStripe\Assets\FilenameParsing\NaturalFileIDHelper:
class: CustomFileIDHelper
但是只有通过ClassName::create()
函数实例化对象才有效,我在框架中找到了这段代码:
(LegacyThumbnailMigrationHelper.php)
$defaultFileIDHelper = new NaturalFileIDHelper(), // Injector is not called here.
您需要覆盖调用 new NaturalFileIDHelper()
的 classes 并将其修改为 NaturalFileIDHelper::create()
,您可以调用 ::create()
因为 NaturalFileIDHelper
class 具有 use Injectable;
特质。
此外,您可以使用 NaturalFileIDHelper::create()
更改创建对框架存储库的拉取请求,而不是经历重写调用 new NaturalFileIDHelper()
的 classes 的麻烦,因为它将是对当前框架代码的改进(它支持使用依赖注入)。
我正在从事 SilverStripe 项目。 SilverStripe 项目版本为 4.4.4。在我的项目中,我试图替换为接口注入的 class 。接口和 class 都是框架的一部分。
在框架代码中,有如下class
class NaturalFileIDHelper implements FileIDHelper
如您所见,NaturalFileIDHelper 正在实现 FileIDHelper 接口。我想要做的是,我想用我的客户 class 替换所有 NaturalFileIDHelper 实例,称为 CustomFileIDHelper class,它也实现了 FileIDHelper 接口。
这就是我所做的。
我创建了一个名为 CustomFileIDHelper 的自定义 class,它实现了 FileIDHelper 接口。
然后我在 mysite.yml.
中添加了以下代码片段 SilverStripe\Assets\FilenameParsing\FileIDHelper:
class: CustomFileIDHelper
然后我重建项目。但是我的项目还在使用框架自带的NaturalFileIDHelperclass。似乎没有使用 CustomFileIDHelper class。
我怎样才能让它工作?可以吗?
I want to replace all the
NaturalFileIDHelper
instances with my customer class calledCustomFileIDHelper
class
如果您想替换所有 NaturalFileIDHelper
个实例,那么您应该覆盖 class(而不是 FileIDHelper
)。此外,您拥有的 .yml
配置需要传递给 Injector
。 (https://docs.silverstripe.org/en/4/developer_guides/extending/injector/)
SilverStripe\Core\Injector\Injector:
SilverStripe\Assets\FilenameParsing\NaturalFileIDHelper:
class: CustomFileIDHelper
但是只有通过ClassName::create()
函数实例化对象才有效,我在框架中找到了这段代码:
(LegacyThumbnailMigrationHelper.php)
$defaultFileIDHelper = new NaturalFileIDHelper(), // Injector is not called here.
您需要覆盖调用 new NaturalFileIDHelper()
的 classes 并将其修改为 NaturalFileIDHelper::create()
,您可以调用 ::create()
因为 NaturalFileIDHelper
class 具有 use Injectable;
特质。
此外,您可以使用 NaturalFileIDHelper::create()
更改创建对框架存储库的拉取请求,而不是经历重写调用 new NaturalFileIDHelper()
的 classes 的麻烦,因为它将是对当前框架代码的改进(它支持使用依赖注入)。