Asp.net 在ASP.Core中,什么是;将IStartup直接注入依赖注入容器,而不是调用UseStartup或Configure;什么意思?
最后一节指出: 如果主机是通过将Asp.net 在ASP.Core中,什么是;将IStartup直接注入依赖注入容器,而不是调用UseStartup或Configure;什么意思?,asp.net,.net,dependency-injection,asp.net-core,Asp.net,.net,Dependency Injection,Asp.net Core,最后一节指出: 如果主机是通过将IStartup直接注入 依赖项注入容器而不是调用UseStartup或 配置,可能会发生以下错误: 未处理异常:System.ArgumentException:必须提供有效的非空应用程序名称。 发生这种情况的原因是applicationName(ApplicationKey)(当前 程序集)是扫描主机启动属性所必需的。如果应用程序 手动将IStartup注入依赖项注入容器,添加 使用指定的程序集名称调用WebHostBuilder: WebHost.Creat
IStartup
直接注入
依赖项注入容器而不是调用UseStartup
或
配置
,可能会发生以下错误:
未处理异常:System.ArgumentException:必须提供有效的非空应用程序名称。
发生这种情况的原因是applicationName(ApplicationKey)
(当前
程序集)是扫描主机启动属性所必需的。如果应用程序
手动将IStartup
注入依赖项注入容器,添加
使用指定的程序集名称调用WebHostBuilder
:
WebHost.CreateDefaultBuilder(args)
.UseSetting(“applicationName”,“有关使用UseStartup
injection语法添加正常启动和注入启动的更多信息。我看到的唯一区别是注入启动由Ihostingstartup
实现调用,但“必需的”UseSetting()
这两个函数都没有调用。上面粗体的句子是什么意思
如何将IStartup直接注入依赖项
注射容器
你可以这样做
IWebHostBuilder webbuilder = new WebHostBuilder().ConfigureServices(services =>
{
services.AddSingleton<IStartup>(mockStartup);
}).UseSetting(WebHostDefaults.ApplicationKey, "<ApplicationAssemblyName>");
然后在断言区域中,您可以执行
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Created));
控制器操作如下所示:
[HttpPost]
[ValidateJobDetailsRequest]
public async Task<IActionResult> AddNewJobRequest([FromBody] AddNewRequest addNewlRequest)
{
Entity detailEntity = this._mapper.Map<AddNewRequest , Entity>(addNewlRequest);
await this._manager.AddRequest(detailEntity);
this._logger.LogInformation($"The detail = {jobDetailRequest} has successfully been dispatched.");
return Created(string.Empty, addNewlRequest);
}
[HttpPost]
[ValidateJobDetailsRequest]
公共异步任务AddNewJobRequest([FromBody]AddNewRequest addNewlRequest)
{
Entity detailEntity=this.\u mapper.Map(addNewlRequest);
等待此消息。\u manager.AddRequest(detailEntity);
此._logger.LogInformation($“详细信息={jobDetailRequest}已成功调度。”);
创建的返回(string.Empty,addNewlRequest);
}
如果要直接测试此方法,则不需要测试ValidateJobDetailsRequest
,它检查模型是否有效,如果模型无效,则返回错误请求(HTTP 400)状态
如果我遗漏了什么,你可以在评论中问任何问题
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Created));
[HttpPost]
[ValidateJobDetailsRequest]
public async Task<IActionResult> AddNewJobRequest([FromBody] AddNewRequest addNewlRequest)
{
Entity detailEntity = this._mapper.Map<AddNewRequest , Entity>(addNewlRequest);
await this._manager.AddRequest(detailEntity);
this._logger.LogInformation($"The detail = {jobDetailRequest} has successfully been dispatched.");
return Created(string.Empty, addNewlRequest);
}