gpt4 book ai didi

dependency-injection - 是否可以将参数传递给 Symony2 容器构造函数

转载 作者:行者123 更新时间:2023-12-04 05:49:11 24 4
gpt4 key购买 nike

在 Symfony2 中创建服务容器时,您主要将“静态”参数(如其他类等)传递给它的构造函数。

但是我想创建一个工厂,因此我需要能够将动态参数传递给服务构造函数。

我发现的示例(例如 http://symfony.com/doc/current/cookbook/service_container/factories.html )最终都使用静态参数作为参数。

但是,如果我希望我的工厂根据(例如)用户输入来决定返回哪个对象,我该怎么办?

最佳答案

我在理解为什么服务工厂不适用于您的案例时遇到了一些问题。您是否需要返回彼此无关的不同服务类?

我从工厂示例中看到的是,您可以执行以下操作:

class NewsletterFactory
{
public function __constructor(...)
{
// Receive arguments needed to create the service below
}

public function get()
{
// Say the variable $userInput exists and is derived from constructor
if ($userInput === 'string')
return new NewsletterManager($dynamicArgument1);

if ($userInput === 'integer')
return new AnotherNewsletterManager($dynamicArgument2);

return new DefaultNewsletterManager();
}
}

现在,如果这不符合您的需求。你也可以创建一个服务说 CustomFactory这将返回您需要的内容。返回的不是直接的服务,所以你可以为所欲为。但这会阻止您请求 CustomFactory 创建的对象。从依赖容器。

与此类似的是 FormFactory .它是用于实例化表单类型的工厂。但是 FormFactory更强大,因为它与依赖注入(inject)标签和编译器 channel 相结合,它们将每种类型注册到依赖注入(inject)系统中,以便它们可以自己检索。我并不完全了解 Form 的所有内部结构。组件,但我认为如果其他方法不能解决您的问题。

问候,
马特

关于dependency-injection - 是否可以将参数传递给 Symony2 容器构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com