我正在做一個MVC 5與API2控制器應用程序。mvc api控制器依賴注入System.Web.Http和System.Web.Mvc引用錯誤
我有一個控制器,在同一個項目中調用ApiController。 在我的Api控制器方法中,我想使用DI。
看起來像這樣。
[ActionName("Method1")]
[HttpPost]
public int Method1(long User_id)
{
long user_id = Newtonsoft.Json.JsonConvert.DeserializeObject<long>(User_id.ToString());
IContactRepository _contactRepository = DependencyResolver.Current.GetService<IContactRepository>();
return _contactRepository.Get_CountMensajeByUser(user_id);
}
爲了使用
[ActionName( 「RetProduct」)]和[HttpPost]
我必須包括using System.Web.Http;
參考
但是,另一方面,爲了使用DependencyResolver
我必須包括
using System.Web.Mvc;
當我包含該引用時,System.Web.Http;
不起作用。
另一種替代方法是設置德DI的API的控制器構造在這樣
private IContactRepository _sessionRepository;
public ApiController(IContactRepository contactRepository)
{
_contactRepository = contactRepository;
}
所以我避免使用DependencyResolver
。但是我必須在Controller構造函數中使用參數。 在我的控制器上,我這樣稱呼Api控制器。
var webApi = new APIController();
model.CantMensajeByUser = webApi.CountMensajeByUser(10);
如果我不使用參數。
什麼是正確的做法?
你混淆了這個概念。您建議使用Service Locator反模式的第一個片段。顯式構造函數注入是要走的路,但不需要在Controller中創建ApiController。只需具備服務中的功能並將服務注入Controller即可。如果Web API與MVC控制器共享相同的項目,則DRY將重用這些服務。 – Nkosi