C# 关于服务定位器实现的问题

C# 关于服务定位器实现的问题,c#,.net,dependency-injection,service-locator,C#,.net,Dependency Injection,Service Locator,我需要你的帮助,我知道服务定位器不是最好的选择之一,但要考虑到它的实现 最正确的方法是在每个层中都有一个定位器类,这个类将负责解决特定层的依赖关系 示例:业务层有自己的服务定位器类,该类只解决该层的依赖关系,数据访问层也有自己的定位器 如果不是最好的选择,你有什么建议 提前,谢谢。您不应该每层有一个服务定位器。在整个应用程序中应该只有一个,这将是解析对象图的唯一位置。你不应该把东西分层 例如,MVCHomeController可能依赖于IRepository(DAL层)或ICommandHand

我需要你的帮助,我知道服务定位器不是最好的选择之一,但要考虑到它的实现

最正确的方法是在每个层中都有一个定位器类,这个类将负责解决特定层的依赖关系

示例:业务层有自己的服务定位器类,该类只解决该层的依赖关系,数据访问层也有自己的定位器

如果不是最好的选择,你有什么建议


提前,谢谢。

您不应该每层有一个服务定位器。在整个应用程序中应该只有一个,这将是解析对象图的唯一位置。你不应该把东西分层

例如,MVC
HomeController
可能依赖于
IRepository
(DAL层)或
ICommandHandler
(业务层),而这些应该只是
HomController
的构造函数中的依赖项。让
HomeController
调用进入
BusinessLayerServiceLocator.GetInstance
将在尝试对
HomeController
进行单元测试时引发问题。这将使应用程序的布线更加困难


但是,这并不意味着您应该在启动项目中放置连接层的代码。例如,您可以将连接所有业务类的代码放置在业务层程序集或放置在业务层程序集“顶部”的程序集内。但是,只有在多个应用程序(例如MVC和WCF项目)之间共享此业务层时,才应该这样做。当您这样做时,您仍然不应该在业务层中有服务定位器。相反,您应该将容器实例传递给业务层的引导方法。通过这种方式,它可以配置容器实例,但最终应用程序保留引用并保持控制。

每个层不应该有一个服务定位器。在整个应用程序中应该只有一个,这将是解析对象图的唯一位置。你不应该把东西分层

例如,MVC
HomeController
可能依赖于
IRepository
(DAL层)或
ICommandHandler
(业务层),而这些应该只是
HomController
的构造函数中的依赖项。让
HomeController
调用进入
BusinessLayerServiceLocator.GetInstance
将在尝试对
HomeController
进行单元测试时引发问题。这将使应用程序的布线更加困难


但是,这并不意味着您应该在启动项目中放置连接层的代码。例如,您可以将连接所有业务类的代码放置在业务层程序集或放置在业务层程序集“顶部”的程序集内。但是,只有在多个应用程序(例如MVC和WCF项目)之间共享此业务层时,才应该这样做。当您这样做时,您仍然不应该在业务层中有服务定位器。相反,您应该将容器实例传递给业务层的引导方法。通过这种方式,它可以配置容器实例,但最终应用程序保留引用并保持控制。

您使用的是什么语言?您好,我使用的是C#。谢谢你的关注。你用的是什么语言?嗨,我用的是C。谢谢你的关注。