【问题标题】:Use a ServiceManager-like system with extisting code将类似 Service Manager 的系统与现有代码一起使用
【发布时间】:2014-04-02 14:12:03
【问题描述】:

我使用这样的代码在一个老式框架上工作:(UserManager 是这样的多个案例的一个例子)

// Somewhere ...
$user_manager = new UserManager();
[...]

// Somewhere else ...
$user_manager = new UserManager($context_variable);
[...]

我们搜索以更新框架,以便能够在使用此框架的项目中覆盖 UserManager。首先,我们看看 Zend Service Manager / Symfony Dependency Injector 来做这样的事情:

// In the start, define services
$serviceManager = new ServiceManager();
// With configurable $user_manager_class in projects who use this framework.
$serviceManager->setService('user_manager', $user_manager_class); 

// And update code of framework when use this UserManager
// Somewhere ...
$user_manager = $serviceManager->get('user_manager');

但有时在框架中 UserManager 是用构造参数调用的:

// Somewhere ...
$user_manager = new UserManager($context_variable);
[...]

在这些情况下似乎无法使用服务管理系统?在框架代码中使用的 UserManager 可能不是 Service 吗? 如果我们可以制作一个系统来为将来的实例准备类名,那么有什么干净的方法可以做到这一点?

【问题讨论】:

    标签: php oop factory


    【解决方案1】:
    $serviceManager->setService('user_manager', $user_manager_class); 
    

    设置服务时,可以允许传递构造函数参数,可以引用其他服务。

    $serviceManager->setService('user_manager', 
        $user_manager_class,array($constructorArg1,$constructorArg2)); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多