我需要你的帮助,我知道服务定位器不是最好的选择之一,但考虑到它的实现。
最正确的是在每一层都有一个定位器类,这个类将负责解决该特定层的依赖关系?
示例:业务层有自己的服务定位器类,只解决该层的依赖关系,数据访问层也有自己的定位器。
如果不是最好的选择,你有什么建议?
提前谢谢你。
我需要你的帮助,我知道服务定位器不是最好的选择之一,但考虑到它的实现。
最正确的是在每一层都有一个定位器类,这个类将负责解决该特定层的依赖关系?
示例:业务层有自己的服务定位器类,只解决该层的依赖关系,数据访问层也有自己的定位器。
如果不是最好的选择,你有什么建议?
提前谢谢你。
每层不应有一个服务定位器。在您的整个应用程序中应该只有一个组合根,这将是您解析对象图的唯一位置。您不应该在层级上分解事物。
例如,MVCHomeController
可能依赖于IRepository<T>
(DAL 层)或ICommandHandler<T>
(业务层),这些应该只是HomController
's 构造函数中的依赖项。在尝试对它进行单元测试时,将HomeController
调用放入 aBusinessLayerServiceLocator.GetInstance
会导致问题HomeController
。这将使应用程序的布线更加困难。
但是,这并不意味着您应该将连接层的代码放在启动项目中。例如,您可以将连接所有业务类的代码放置在业务层程序集内或放置在业务层程序集“顶部”的程序集内。但是,仅当此业务层在多个应用程序(例如 MVC 和 WCF 项目)之间共享时,您才应该这样做。当你这样做时,你仍然不应该在业务层中有一个服务定位器。相反,您应该将容器实例传递给业务层的 Bootstrap 方法。这样,它可以配置该容器实例,但最终应用程序保留引用并保持控制。