C# 试图理解CreateDefaultBuilder
我是编写C#Api的新手,正在研究IdentityServer4 QuickStart1 我看到QuickstartIdentityServer模块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
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();