Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在ASP.Core中,什么是;将IStartup直接注入依赖注入容器,而不是调用UseStartup或Configure;什么意思?_Asp.net_.net_Dependency Injection_Asp.net Core - Fatal编程技术网

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);
}