服务定位器模式 - 如何处理同一个服务接口的多个实现
Posted
技术标签:
【中文标题】服务定位器模式 - 如何处理同一个服务接口的多个实现【英文标题】:Service Locator Pattern - How to deal with more than one implementation of the same service interface 【发布时间】:2013-12-26 14:39:26 【问题描述】:我对服务定位器设计模式有点困惑。
关于这种模式,这似乎是一个非常非常基本的问题,但我想不通:如果我有多个类实现某个 IServiceX 接口怎么办?定位器如何解析我正在寻找的实例?
例如,我可以注册:
ServiceA 实现 IServiceX ServiceB 实现 IServiceX
这似乎完全有可能,但我不确定。假设我有两种消息服务(相同的服务接口),我想在运行时使用这两种实现。定位器将如何在这些不同的实现之间进行选择?
【问题讨论】:
【参考方案1】:这是有趣的部分。 完全由您决定。
您可以遍历调用堆栈并找出调用的来源,然后根据调用者返回不同的实现。
您可能有一个始终适用于特定实现的工厂方法。
您可以根据一天中的时间、一周中的某天、可用的内存量来返回实例...
一切由你决定!
【讨论】:
很高兴知道这一点!尽管我见过的最常见的用法是 1:1 实现(在示例和教程中)。以上是关于服务定位器模式 - 如何处理同一个服务接口的多个实现的主要内容,如果未能解决你的问题,请参考以下文章