配置依赖注入容器

时间:2011-04-04 10:37:13

标签: php dependency-injection

喂!我的第一篇文章,但Stackoverflow的长期读者。

无论如何,有一个棘手的问题让我感到紧张。这是关于DIC(依赖注入容器)应该如何配置的问题。我正在为我们正在设置的框架开发会话处理程序。会话处理程序依赖于存储服务,一些简单的配置参数,并且是使用salt生成会话ID的那个。

会话处理程序由我们的容器加载,它接受所有设置,作为配置程序对象或参数数组。容器检查调用的存储服务的设置,并加载服务并将其注入会话处理程序。存储服务目前不接受任何构造函数设置。

会话处理程序依次从注入的设置中生成会话ID。并从那里注入会话ID和与该存储服务相关的其他设置。

我的问题是:

  1. 让Session Handler将设置注入存储服务是否合适?这就像一个两步火箭。
  2. 当我在容器中加载存储服务时,是否应该从start开始注入会话ID和其他参数?这最终让我产生了会话ID的问题,并且必须依靠存储服务来完成它。
  3. 如果我从上面的提案中做出任何一种方式会出现什么问题?
  4. 我打破了什么“神圣”:)

1 个答案:

答案 0 :(得分:0)

我对这部分感到有点困惑:

  

它的会话处理程序生成   来自设置的会话ID   注射了并从那里注入   会话ID和其他设置   与该存储服务相关。

您已经说过会话处理程序依赖于存储服务。存储服务也会对会话处理程序有一些依赖性,这是一个坏主意,因为那时你的初始化过程比它需要的更复杂和容易出错。

所以这就是问题:存储服务需要从会话处理程序中进行哪些设置?您可以从存储服务中删除任何或所有这些依赖项吗?如果是这样,你应该这样做。

作为一个实际示例:假设存储服务支持将数据存储为命名blob(可以实现为文件,也可以实现为数据库表中的行,或其他任何内容)。您使用依赖于会话ID的名称来存储会话数据。您需要做的是不告诉存储服务会话ID是什么,而是让会话处理程序记住它,并且只有在使用存储功能时才将该信息提供给存储服务。

换句话说,尝试将您的数据逻辑分组。是否存在阻止您这样做的特定问题?