C# 有多少个';配置';方法在asp.net内核中是否可行?

C# 有多少个';配置';方法在asp.net内核中是否可行?,c#,asp.net-web-api,asp.net-core-3.1,C#,Asp.net Web Api,Asp.net Core 3.1,在ASP.NET Core 3.1中,Configure方法发挥着神奇的作用 情景1 创建新项目时,框架将构建以下方法签名: public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 应用程序使用此签名并不奇怪,因为我可以假定ASP.NET核心框架希望签名保持原样 场景2 删除第二个参数IWebHostEnvironment: public void Configure(IApplicationBuilder

在ASP.NET Core 3.1中,Configure方法发挥着神奇的作用

情景1

创建新项目时,框架将构建以下方法签名:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
应用程序使用此签名并不奇怪,因为我可以假定ASP.NET核心框架希望签名保持原样

场景2

删除第二个参数IWebHostEnvironment:

public void Configure(IApplicationBuilder app)
应用程序工作正常

场景3

在“ConfigureServices”方法中将my DbContext与记录器一起添加到IServiceCollection中:

public void Configure(IApplicationBuilder app, ILogger<Startup> logger, VegaDbContext vegaDbContext)
应用程序不工作。将引发以下异常:

System.Exception:'无法解析类型为的服务 “织女星。控制器。天气预报控制器” 类型上方法“Configure”的参数“weatherForecastController” “织女星,创业”


有人能解释一下框架实际上是如何完成方法调用的,以及它如何能够解析一些类型,如ILogger和VegaDbContext,但不能解析WeatherForecastController。

它通过使用依赖注入基础设施来工作。
Configure
的参数从web主机的
ServiceProvider
检索。这里的关键字是“服务”--默认情况下,控制器不作为服务添加到服务集合中

为了通过依赖项注入访问控制器,您需要调用
ConfigureServices
方法的
addcontrollerasservices
扩展方法

services.AddControllers()
        .AddControllersAsServices();
// or
services.AddControllersWithViews() 
        .AddControllersAsServices();
// or
services.AddMvc()
        .AddControllersAsServices();
public void Configure(IApplicationBuilder app, WeatherForecastController weatherForecastController)
services.AddControllers()
        .AddControllersAsServices();
// or
services.AddControllersWithViews() 
        .AddControllersAsServices();
// or
services.AddMvc()
        .AddControllersAsServices();