根据 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/