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