定義
服務定位模式(Service Locator Pattern)指的是在組合根以外的地方,以不確定的一群不穩定依賴對象,作為依賴需求組件提供給應用程序使用。
更多解釋詳見服務定位模式-維基百科
file
public class MainCityController
{
public MainCityController()
{
}
public void StartUp()
{
IProductService service = Locator.GerService<IProductService>();
var products = service.GetFeaturedProducts();
// products do something ...
}
}
相對于IOC容器來講(組合根以外使用),服務定位模式是一種反面模式,它所造成的危害如下
- 因為需要對
Locator
事先注冊對應的服務項,否則會造成獲取服務失敗,也就造成了時序耦合。 - 隱藏其獲取服務的依賴關系,限制了對此服務的了解。(因為使用此服務,所以它所涉及的依賴關系還是應該知道的)
- 在對應的模塊中直接使用
Locator
,會把不需要的依賴項帶入進來,如果Locator
歸屬在其他模塊,那么也就把Locator
對應的模塊強行綁定進來。
服務定位成為反面模式最根本的原因就是在組合根以外的地方獲取依賴對象,如果在組合根中進行依賴項的獲取和解析,使用IOC容器和服務定位都是沒問題的。