Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Dependency injection 是否可以将参数传递给Symony2容器构造函数_Dependency Injection_Symfony_Containers - Fatal编程技术网

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

Dependency injection 是否可以将参数传递给Symony2容器构造函数,dependency-injection,symfony,containers,Dependency Injection,Symfony,Containers,在Symfony2中创建服务容器时,通常会将“静态”参数(如其他类等)传递给其构造函数 但是,我想创建一个工厂,因此我需要能够将一个动态参数传递给服务构造函数 我发现的例子(例如)都使用静态参数作为参数 但是,如果我想让我的工厂根据(例如)用户输入决定返回哪个对象,我该怎么办?我在理解为什么service factory不应该处理您的案例时遇到一些问题。是否需要返回彼此无关的不同服务类 我从工厂示例中看到,您可以执行以下操作: class NewsletterFactory { publ

在Symfony2中创建服务容器时,通常会将“静态”参数(如其他类等)传递给其构造函数

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

我发现的例子(例如)都使用静态参数作为参数


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

我在理解为什么service factory不应该处理您的案例时遇到一些问题。是否需要返回彼此无关的不同服务类

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

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
功能更强大,因为它与依赖项注入标记和编译器过程相结合,后者将每种类型注册到依赖项注入系统中,以便可以自己检索它们。我并不完全了解
表单
组件的所有内部结构,但我认为如果其他方法不这样做,它可以解决您的问题

问候,
马特