Symfony 4 - 将构造函数参数注入自动装配的第三方服务
Symfony 4 - Injecting constructor params into an autowired third-party service
我正在使用 Symfony 4,目前正在集成 Symfony Serializer 组件。通过自动装配,提供的 Serializer 服务可以通过 typehinting 方法自动注入到 classes 中,像这样,
// Container injects instance of \Symfony\Component\Serializer\Serializer
public function indexAction(SerializerInterface $serializer)
第三方 Serializer
class 可以在 point of construction 接受规范化器和编码器数组,我认为在默认注册服务中它们是空的(见下文)。
有没有一种方法可以在创建该服务时触发规范化器和编码器的注入(实质上是更新该服务的配置),或者是否必须在应用程序的 services.yaml
文件中注册自定义服务指的是包含参数的第三方 class?如果是后者,如何定义 Normalizer/Encoder classes 数组并将其作为参数注入该服务?
编辑
原来我错了,默认的Serializer服务没有encoders/normalizers(否则不知道怎么做就没用了!),下面是它的默认状态;
相信后者就是您要找的。
实现将那些 normalizers/encoders 传递给构造函数(因为它们既不是标量也不是服务)的方法是提供自定义服务工厂 class,就像这样:
Using a Factory to Create Services
希望这对您有所帮助...
我正在使用 Symfony 4,目前正在集成 Symfony Serializer 组件。通过自动装配,提供的 Serializer 服务可以通过 typehinting 方法自动注入到 classes 中,像这样,
// Container injects instance of \Symfony\Component\Serializer\Serializer
public function indexAction(SerializerInterface $serializer)
第三方 Serializer
class 可以在 point of construction 接受规范化器和编码器数组,我认为在默认注册服务中它们是空的(见下文)。
有没有一种方法可以在创建该服务时触发规范化器和编码器的注入(实质上是更新该服务的配置),或者是否必须在应用程序的 services.yaml
文件中注册自定义服务指的是包含参数的第三方 class?如果是后者,如何定义 Normalizer/Encoder classes 数组并将其作为参数注入该服务?
编辑
原来我错了,默认的Serializer服务没有encoders/normalizers(否则不知道怎么做就没用了!),下面是它的默认状态;
相信后者就是您要找的。
实现将那些 normalizers/encoders 传递给构造函数(因为它们既不是标量也不是服务)的方法是提供自定义服务工厂 class,就像这样:
Using a Factory to Create Services
希望这对您有所帮助...