2016-06-14 23 views
1

我想做一個內部API的Web請求,我發現大多數人使用HTTPCLient但我只是不想硬編碼依賴項在我的控制器或創建一個包裝現在,所以我決定嘗試IWebRequestCreate。 在運行該應用程序我得到以下錯誤的時間:如何resvister IWebRequestCreate mvc 6

InvalidOperationException: Unable to resolve service for type 'System.Net.IWebRequestCreate' while attempting to activate 'Project.Web.Main.Controllers.HomeController'.

那是因爲我還沒有登記在該服務的啓動,所以當我試圖註冊的WebRequest,原來這是一個抽象類,我不得不使用create方法,所以有什麼想法?

我在考慮註冊這樣的:

services.AddTransient<IWebRequestCreate>(x=>x.GetService(???)); 

我的控制器是很基本的:

public class HomeController : Controller 
    { 
     private readonly IWebRequestCreate _webRequest; 
     private readonly AppOptions _options; 

     public HomeController(IWebRequestCreate webRequest, IOptions<AppOptions> settings) 
     { 
      _webRequest = webRequest; 
      _options = settings.Value; 
     } 

     public IActionResult Index() 
     { 
      var wr = _webRequest.Create(new Uri(_options.ApiHost)); 
      var response = wr.GetResponseAsync(); 

      //TODO map the response to a DTO 
      return View(); 
     } 
    } 

感謝。

回答

1

我結束了通過建立IWebRequestCreate實現:

public class MyWebRequest: IWebRequestCreate 
    { 
     public WebRequest Create(Uri uri) 
     { 
      return WebRequest.Create(uri); 
     } 
    } 

和註冊的項目配置的依賴:

services.AddTransient(typeof(IWebRequestCreate),typeof(MyWebRequest));