通常当我需要将一个或多个服务注入另一个服务时,我明确地注入每个服务.然而,我有一种情况,注入服务容器本身将使事情变得更容易.我知道这不是一个推荐的做法,但我很好奇技术原因是为了阻止这一点.这是合法的,因为它太资源密集,还是更个人的感觉,它太凌乱了?
如果您注入容器,则不会使依赖关系清楚.事实上,你比以前更模糊他们.如果你有这样的课程…
class DocumentCreator(IFileNamer fileNamer,IRepository repository) { ... }
…你可以看到依赖关系.您还可以轻松地将这些依赖关系模拟为单元测试,以确保您隔离DocumentCreator,并且可以知道任何测试失败都是其代码而不是其依赖关系中的代码的结果.
另一方面,如果你这样做
class DocumentCreator(IDependencyContainer container) { ... }
…你掩盖了依赖关系.你不知道,没有检查课程的内部,它需要一个IFileNamer和一个IR存储库.
为了测试DocumentCreator,您也不会轻易知道您需要放入容器中的嘲弄.模拟IDependencyContainer根本不会帮助你;您的类仍然会在测试中失败,因为容器不会包含IFileNamer和IRepository,除非您检查类的内部结构以确定它们是必需的.