首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mvc 6中重新注册IWebRequestCreate

如何在mvc 6中重新注册IWebRequestCreate
EN

Stack Overflow用户
提问于 2016-06-14 02:14:29
回答 1查看 292关注 0票数 1

我想对内部API进行web请求,我发现大多数人都使用HTTPCLient,但我只是不想在控制器中硬编码依赖项或创建包装器,所以我决定尝试IWebRequestCreate。在运行应用程序时,我得到以下错误:

'Project.Web.Main.Controllers.HomeController'.:在尝试激活InvalidOperationException时,无法解析“System.Net.IWebRequestCreate”类型的服务

那是因为我在一开始还没有注册那个服务,所以当我尝试注册webrequest时,发现这是一个抽象类,我被迫使用create方法,所以有什么想法吗?

我在考虑像这样注册:

代码语言:javascript
复制
services.AddTransient<IWebRequestCreate>(x=>x.GetService(???));

我的控制器非常基本:

代码语言:javascript
复制
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();
        }
    }

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 00:04:20

最后,我为IWebRequestCreate创建了一个实现:

代码语言:javascript
复制
 public class MyWebRequest: IWebRequestCreate
    {
        public WebRequest Create(Uri uri)
        {
            return WebRequest.Create(uri);
        }
    }

并在项目配置中注册依赖项:

代码语言:javascript
复制
services.AddTransient(typeof(IWebRequestCreate),typeof(MyWebRequest));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37801934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档