Skip to main content
 首页 » 编程设计

c#之为什么没有任何东西传递给默认 webapi .Net Core 应用程序中的 .UseStartupStartup>() 方法

2024年02月25日31jyk

根据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);