如何使用SilverStripe中的自定义类注入作为框架一部分的接口

问题描述 投票:0回答:1

我正在从事SilverStripe项目。 Project SilverStripe版本为4.4.4。在我的项目中,我试图替换为接口注入的类。接口和类都是框架的一部分。

在框架代码中,它具有以下类

class NaturalFileIDHelper implements FileIDHelper

如您所见,NaturalFileIDHelper正在实现FileIDHelper接口。我想做的是用我的客户类(称为CustomFileIDHelper类)替换所有NaturalFileIDHelper实例,该类也实现了FileIDHelper接口。

这就是我所做的。

我创建了一个名为CustomFileIDHelper的自定义类,该类正在实现FileIDHelper接口。

然后我在mysite.yml中添加了以下代码段。

  SilverStripe\Assets\FilenameParsing\FileIDHelper:
    class: CustomFileIDHelper

然后我重建项目。但是我的项目仍在使用框架随附的NaturalFileIDHelper类。似乎未使用CustomFileIDHelper类。

我如何使它工作?可以这样做吗?

silverstripe silverstripe-4
1个回答
0
投票

我想用称为NaturalFileIDHelper类的客户类替换所有CustomFileIDHelper实例>

如果要替换所有NaturalFileIDHelper实例,则应重写该类(而不是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()的类并将其修改为NaturalFileIDHelper::create(),因为::create()类具有NaturalFileIDHelper特性,因此您可以调用use Injectable;

© www.soinside.com 2019 - 2024. All rights reserved.