C# 试图理解CreateDefaultBuilder

C# 试图理解CreateDefaultBuilder,c#,asp.net-core,dependency-injection,identityserver4,C#,Asp.net Core,Dependency Injection,Identityserver4,我是编写C#Api的新手,正在研究IdentityServer4 QuickStart1 我看到QuickstartIdentityServer模块 using System; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; namespace QuickstartIdentityServer { public class Program { public static void M

我是编写C#Api的新手,正在研究IdentityServer4 QuickStart1 我看到QuickstartIdentityServer模块

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace QuickstartIdentityServer
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Title = "IdentityServer";

            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}
查看Microsoft.AspNetCore(从元数据中),我发现它是一个包含方法声明的静态类

public static IWebHostBuilder CreateDefaultBuilder(string[] args);
因此,该方法的实际代码必须在Microsoft.AspNetCore.Dll中

为什么它需要同时在IdentityServer4和Api中运行?

公共静态IWebHost BuildWebHost(string[]args)=>
public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();
WebHost.CreateDefaultBuilder(args) .UseStartup() .Build();
这是启动并运行ASP.NET核心应用程序所必需的默认代码位。这基本上是用通常的默认值创建一个web主机,配置Startup类,然后构建web主机。web主机实际上就是为您的web应用程序服务的东西

您可以查看
CreateDefaultBuilder
,但从实际问题来看,这对您帮助不大

为什么它需要同时在IdentityServer4和Api中运行

这里的Identity Server示例所做的事情是将Identity Server和API放在不同的服务器上。这在技术上是不必要的,您可以在同一个应用程序中托管它们。然而,在实践中,更可能的情况是您在某个中心位置部署了Identity Server一次,然后您可能有多个其他服务器API、客户端,无论它们将服务器用作外部身份验证提供者

因此,他们正在创建独立的web主机,因为它们是独立的web应用程序。它们是在独立的.NET项目中创建的独立web应用程序

如果仔细阅读,您会注意到他们实际上为此创建了单独的项目。独立的ASP.NET核心项目意味着独立的web应用程序,每个应用程序都单独托管。

公共静态IWebHost BuildWebHost(string[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
这是启动并运行ASP.NET核心应用程序所必需的默认代码位。这基本上是用通常的默认值创建一个web主机,配置Startup类,然后构建web主机。web主机实际上就是为您的web应用程序服务的东西

您可以查看
CreateDefaultBuilder
,但从实际问题来看,这对您帮助不大

为什么它需要同时在IdentityServer4和Api中运行

这里的Identity Server示例所做的事情是将Identity Server和API放在不同的服务器上。这在技术上是不必要的,您可以在同一个应用程序中托管它们。然而,在实践中,更可能的情况是您在某个中心位置部署了Identity Server一次,然后您可能有多个其他服务器API、客户端,无论它们将服务器用作外部身份验证提供者

因此,他们正在创建独立的web主机,因为它们是独立的web应用程序。它们是在独立的.NET项目中创建的独立web应用程序


如果仔细阅读,您会注意到他们实际上为此创建了单独的项目。而单独的ASP.NET核心项目意味着单独托管的web应用程序。

WebHost.CreateDefaultBuilder()
位于
Microsoft.AspNetCore
程序集中。它与依赖注入无关…它是一个标准的静态方法。谢谢@Brad我纠正了这个问题。不,它没有显示主体。但在最新的VisualStudio(15.7或15.8预览版)中,它将尝试使用ILSpy反编译目标库以显示内容。虽然它不是原始来源的1:1,但通常足以让你了解发生了什么。技术上,它不必这样做。这就是快速入门的结构。您可以合并这些项目以承载IdentityServer4项目中的API控制器。
WebHost.CreateDefaultBuilder()
位于
Microsoft.AspNetCore
程序集中。它与依赖注入无关…它是一个标准的静态方法。谢谢@Brad我纠正了这个问题。不,它没有显示主体。但在最新的VisualStudio(15.7或15.8预览版)中,它将尝试使用ILSpy反编译目标库以显示内容。虽然它不是原始来源的1:1,但通常足以让你了解发生了什么。技术上,它不必这样做。这就是快速入门的结构。您可以合并这些项目以在IdentityServer4项目中托管API控制器。
public static IWebHostBuilder CreateDefaultBuilder(string[] args);
public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();