c# - 为什么默认 webapi .Net Core 应用程序中没有任何内容传递给 .UseStartup<Startup>() 方法?

标签 c# asp.net-core .net-core

根据 creating a .Net Core webapi应用程序,在 Program.cs 中创建以下代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace dotnet_testing
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

为什么没有任何内容传递给 .UseStartup() 方法?

WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();

从我的角度来看 understanding in the "WebHostBuilderExtensions.UseStartup Method" documentation ,您应该传递一个 IWebHostBuilder:

UseStartup<TStartup>(IWebHostBuilder)

我在“using”语句中没有看到依赖注入(inject),因此它似乎没有被注入(inject)。

最佳答案

如果我们仔细看看该方法的签名

public static Microsoft.AspNetCore.Hosting.IWebHostBuilder UseStartup<TStartup>
  (this Microsoft.AspNetCore.Hosting.IWebHostBuilder hostBuilder) where TStartup : class;

我们将看到它是扩展方法,因此它使用自身作为参数。

编辑:有关扩展方法的信息

这个关键字指向它自己。假设我们需要编写复制字符串的扩展方法。那么,

public static class StringExtensions {
    public static string DublicateString(this string myString) => $"{myString}{myString}";
}

然后才能使用它

var str = "JohnDoe";
var result = str.DublicateString();

编译器自动将 str.DublicateString() 翻译为:

var str = "JohnDoe";
var result = StringExtensions.DublicateString(str);

关于c# - 为什么默认 webapi .Net Core 应用程序中没有任何内容传递给 .UseStartup<Startup>() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841890/

相关文章:

c# - 如何将 double 值转换为时间? C#/ASP.NET

AWS Linux 中的 ASP.NET 异常

c# - 从 Nuget 包中自动提取 native 和托管 DLL

c# - .NET 核心 API : Disable multiple route expanding in SwaggerUI

docker - Docker build提示找不到nuget fallback包文件夹

c# - Postsharp Aspects 执行顺序

c# - 准备操作以供在另一个线程中使用

c# - 多列组合框或 DataGridCombo Box 列收缩

c# - ASP.NET docker-compose 应用程序没有出现在分配的端口上

azure - 锁定期限到期后如何续订锁定?使用 Azure 服务总线 session 队列