【问题标题】:How can I pass an argument to the dependency injection container?如何将参数传递给依赖注入容器?
【发布时间】:2014-08-21 18:04:47
【问题描述】:

我有一个名为GeneralReport 的类,它实现了HttpAccessibleDataGathererInterface,具有一个构造函数和一个名为calculate() 的方法,该方法构建了一个包含报表字段的普通PHP 对象数组。 GeneralReport 接受两个构造函数参数:一个是参数数组,其中包含用于构造查询的输入。第二个参数是另一个类GeneralReportQueryBuilder,用于根据第一个参数构建报表查询。

现在,我希望始终注入第二个参数(即GeneralReportQueryBuilder)。但是,我希望能够以某种方式将第一个参数传递给我的控制器中的 GeneralReport 类。请记住,GeneralReport 类实现了一个接口,因此不能将数组作为参数传递给calculate() 方法。另外,由于在没有输入数组的情况下调用这个类是没有意义的,它不是一个可选的依赖项,为它创建一个 setter 是没有意义的。

我想使用其构造函数使GeneralReport的依赖关系清晰简洁,并且不希望DIC妨碍。

【问题讨论】:

    标签: php symfony dependency-injection dependencies


    【解决方案1】:

    两者之间有区别:

    • 创建不带 X 参数的实例
    • 使用不带 X 参数的实例

    第一个断言由构造函数参数解析,第二个断言在执行期间如果参数未填充或无效则抛出异常! 上下文参数可以由 setter 发送!

    【讨论】:

    • 对不起,你能不能让你的答案不那么抽象?你的意思是我应该有一个只接受GeneralRequestQueryBuilder 并使用setter 设置查询参数数组的构造函数?如果是这样,这种方法的问题在于它隐藏了这样一个事实,即您应该在调用 calculate() 方法之前设置参数,而让程序员将参数指定为构造函数的必需参数,这一点就很清楚了。跨度>
    猜你喜欢
    • 2023-03-09
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多