2011-09-09 42 views
1

我正在爲conversational natural language processing構建一個庫。在很多方面,它的行爲很像MVC3,因爲它具有控制器和操作方法。它也使用依賴注入,就像MVC3爲Controller類實例化構造函數時一樣。主要區別在於英文句子替換了HTTP的URL和表單值;路由基於匹配的句子結構;並且傳入的參數是英語句子中使用的單詞和短語的含義。IDependencyResolver的常見服務定位器和實現

目前它使用Autofac進行依賴注入,但我想刪除該依賴關係並允許調用者使用任何DI容器。

如果我使用P & P/Codeplex上Common Service Locator項目在我的解決方案,然後主叫方仍然需要提供自己的IServiceLocator實現對我的引擎暴露了接口的實例。如果我使用MVC3中的IDependencyResolver,則至少存在從各種DI容器到該接口的映射的現有實現。

我應該: -

  1. 使用通用服務定位器和力呼叫者落實映射類。
  2. 使用已經映射到其他容器的MVC 3 IDependencyResolver接口。
  3. 接受一個object作爲依賴關係解析器,然後用鴨子來獲取我需要的一個方法,這樣我就可以使用MVC3接口,甚至不需要依賴於ASP.NET MVC3。
  4. 其他?
+2

沒有回答你的問題,但它可能會改變你對解決方案1的看法。IServiceLocator的實現可用於大多數流行的容器。所以沒有必要實現你自己的IServiceLocator,除非你想做不同的事情。我不知道這是否需要? –

回答

0

根據定義,通用服務定位器是一個永遠不會更改且不需要特定版本的接口組合件。

此外,所有常用的IOC庫現在都具有用於連接到Common Service Locator的實現。

因此,選項1是最好的選擇,它與Common Service Locator的新版本中斷的風險幾乎爲零。

感謝Philip Laureano幫助回答這個問題。