我在Symfony2中有一个服务,看起来像:
services:
MyCustomService:
class: MyClass
arguments: //Arguments aren't static, but dynamic based on application logic.
Run Code Online (Sandbox Code Playgroud)
是否可以将动态变量传递给服务的构造函数?
在控制器中似乎没有任何额外的参数 $this->get('MyCustomService');
有什么我想念的吗?
对我来说,听起来,你不明白"服务"这个词到底意味着什么.你想要实现的目标不再是服务了.
你仍然可以在"MyClass"中为任何自定义参数定义一个setter方法,同时定义一些默认值,你在使用setter方法时基本上会覆盖它们.
你会使用这样的东西:
$this->get('MyCustomService')->setSomething($something);
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,如果在实例化后无法配置服务(例如,使用配置程序).将责任委托给工厂怎么样?它将允许您使用"动态参数"实例化服务.
services:
MyCustomServiceFactory:
class: MyClassFactory
arguments: [ @dynamicService, %time_prefix% ]
MyCustomService:
class: MyClass
factory_service: MyCustomServiceFactory
factory_method: get
Run Code Online (Sandbox Code Playgroud)
你的工厂想要这样的东西:
class MyClassFactory
{
private $dynamicService;
private $timePrefix;
public function __construct(MyDynamicService $dynamicService, $timePrefix)
{
$this->dynamicService = $dynamicService;
$this->timePrefix = $timePrefix;
}
public function get()
{
// Dynamic arguments based on application logic.
$dynamicArg1 = $this->dynamicService->getArg()
$dynamicArg2 = $this->timePrefix . time();
return new MyClass($dynamicArg1, $dynamicArg2);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13475 次 |
| 最近记录: |