为什么我们需要通用服务定位器库?

时间:2010-12-12 16:18:37

标签: c# silverlight architecture

我有一个3层应用程序。前台,业务,数据层。 我使用Microsoft Unity作为依赖容器。 我已经使用NUnit和RhinoMock来测试应用程序。

我在很多文章中都读过一篇介绍公共服务定位器层的文章 ** 我们应该在哪些scnerios中引入公共服务定位器?

  1. 在项目中用上述架构替换哪一层?
  2. 我的项目中将与哪个层进行通信?

  3. 公共服务定位器层只是一个与业务和前端通信的WCF Web服务项目吗?**

2 个答案:

答案 0 :(得分:1)

我认为你指的是一种定位依赖关系(即服务)的常用方法,所以在你的例子中它将取代Unity(或者Unity可能只是实现公共接口)。

通过这种方式,各种框架可以更轻松地协同工作,因为它们共享识别服务/插件等的常用方法。

我们已经有很多实现功能的库(Unity,Ninject等),但是如果一个框架(例如MVC)想要获得某个接口的实例,它需要知道哪个库你正在使用,并且由于它们不共享通用接口,因此这很困难。使用通用接口,您可以告诉MVC您希望从哪里获取它的对象。

答案 1 :(得分:1)

  

为什么我们需要通用服务定位器   库中?

我们并不真的需要它,它只是提供了更好的分离。它主要是依赖注入顶部的抽象,因此客户端不需要知道服务的位置及其实现方式。

这通常会转到您的客户端代码。例如,创建代理并调用服务的客户端不需要创建代理,它会从服务定位器请求代理。