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