.net核心中如何以及由谁调用启动类的ConfigureServices和Configure方法

时间:2019-08-30 11:43:02

标签: c# asp.net-core .net-core

众所周知,Program.cs的Main方法是应用程序的入口点。正如您在创建任何项目时创建的.net核心默认代码中所看到的。

public static void Main(string[] args)
       {
           CreateWebHostBuilder(args).Build().Run();
       }

       public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
           WebHost.CreateDefaultBuilder(args)
               .UseStartup<Startup>();

在启动类中,我们有两种内置方法,即ConfigureServicesConfigure,如下所示。

public void ConfigureServices(IServiceCollection services)
        {
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
}

我只想知道如何调用这些方法。众所周知,要调用任何方法,我们都必须创建该类的对象,然后可以使用该对象执行该方法,然后执行这些(ConfigureServicesConfigure)方法而不创建任何对象。

请帮助我深入了解。

2 个答案:

答案 0 :(得分:1)

这些方法由ASP.NET Core框架调用。请注意,在您的Main方法中,您可以进行以下调用:

.UseStartup<Startup>()

在此处指定用于启动的类,在本例中为StartupConfigureServicesConfigure方法是按惯例调用的。如果在UseStartup扩展名指定的类中找到了这些方法,则将调用它们。

答案 1 :(得分:0)

作为一个过于简化的解释,

WebHost.CreateDefaultBuilder(args)

方法调用返回用于实现IWebHostBuilder的默认Webhost构建器的对象。然后,UseStartup()扩展方法使用您提供的Startup类配置创建的Webhost构建器。 UseStartup()方法可以标识您的启动类,因为您将其指定为通用参数。 UseStartup()可以保留实现以调用您通过使用反射提供的ConfigureServicesConfigure方法。请注意,调用方法除了创建类的实例外,还可以使用反射。