Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SilverStripe中使用自定义类注入作为框架一部分的接口_Silverstripe_Silverstripe 4 - Fatal编程技术网

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

如何在SilverStripe中使用自定义类注入作为框架一部分的接口,silverstripe,silverstripe-4,Silverstripe,Silverstripe 4,我正在做一个SilverStripe项目。Project SilverStripe版本为4.4.4。在我的项目中,我试图替换为接口注入的类。接口和类都是框架的一部分 在框架代码中,它有以下类 class NaturalFileIDHelper implements FileIDHelper 如您所见,NaturalFileIDHelper正在实现FileIDHelper接口。我想做的是,我想用名为CustomFileIDHelper类的客户类替换所有NaturalFileIDHelper实例,

我正在做一个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类

我怎样才能让它工作?有可能吗

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

如果要替换所有
NaturalFileIDHelper
实例,则应该覆盖该类(而不是
FileIDHelper
)。此外,还需要将您拥有的
.yml
配置传递给
喷油器
。()

但是,只有通过
ClassName::create()
函数实例化对象,并且我在框架中找到这段代码时,这才有效:

(LegacyThumbnailMigrationHelper.php)
$defaultFileIDHelper = new NaturalFileIDHelper(), // Injector is not called here.
您需要重写调用
新NaturalFileIDHelper()
的类,并将其修改为
NaturalFileIDHelper::create()
,您可以调用
::create()
,因为
NaturalFileIDHelper
类具有
使用可注入性特征

另外,您可以使用
NaturalFileIDHelper::create()
更改来创建对框架存储库的拉取请求,而不是重写调用
new NaturalFileIDHelper()
的类,因为这将是对当前框架代码的改进(它支持使用依赖项注入)

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

如果要替换所有
NaturalFileIDHelper
实例,则应覆盖该类(而不是
FileIDHelper
)。此外,还需要将您拥有的
.yml
配置传递给
注入器()

但是,只有通过
ClassName::create()
函数实例化对象,并且我在框架中找到这段代码时,这才有效:

(LegacyThumbnailMigrationHelper.php)
$defaultFileIDHelper = new NaturalFileIDHelper(), // Injector is not called here.
您需要重写调用
新NaturalFileIDHelper()
的类,并将其修改为
NaturalFileIDHelper::create()
,您可以调用
::create()
,因为
NaturalFileIDHelper
类具有
使用可注入;
特性


另外,您可以使用
NaturalFileIDHelper::create()
更改来创建对框架存储库的拉取请求,而不是重写调用
new NaturalFileIDHelper()
的类,因为这将是对当前框架代码的改进(它支持使用依赖项注入).

AFAIK您不能注入其他接口,因为这是PHP的核心功能。使用Injector,您可以替换Conny在下面回答的具体类/实例。AFAIK您不能注入其他接口,因为这是PHP的核心功能。使用Injector,您可以替换Conny在下面回答的具体类/实例。