【问题标题】:How many overloads of 'Configure' method are possible in asp.net core?在 asp.net 核心中可能有多少“配置”方法的重载?
【发布时间】:2020-07-12 12:25:42
【问题描述】:

Configure 方法在 ASP.NET Core 3.1 中就像魔术一样工作。

场景 1

创建新项目时,框架会为以下方法签名提供脚手架:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

应用程序使用此签名并不奇怪,因为我可以假设 ASP.NET Core 框架期望签名保持原样。

场景 2

去掉第二个参数IWebHostEnvironment:

public void Configure(IApplicationBuilder app)

应用程序有效。

场景 3

在 'ConfigureServices' 方法中将我的 DbContext 与记录器一起添加到 IServiceCollection 中:

public void Configure(IApplicationBuilder app, ILogger<Startup> logger, VegaDbContext vegaDbContext)

令人惊讶的是,应用程序有效。看起来该框架足以解析添加到服务集合的类型。好兆头。

Inline 是 ConfigureServices 方法的实现:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<VegaDbContext>(options =>
            options.UseSqlServer(
                configuration.GetConnectionString("VegaDb")));
    services.AddControllers();
}

场景 4

注入 WeatherForecastController,我认为它是通过 services.AddControllers() 添加到 IServiceCollection 的:

public void Configure(IApplicationBuilder app, WeatherForecastController weatherForecastController)

应用程序不工作。抛出以下异常:

System.Exception: '无法解析服务类型 'Vega.Controllers.WeatherForecastController' 用于 类型上的方法“配置”的参数“天气预测控制器” 'Vega.Startup'。'

有人能解释一下方法调用实际上是如何由框架完成的,以及它如何能够解析像 ILogger 和 VegaDbContext 这样的少数类型,而不是 WeatherForecastController.

【问题讨论】:

    标签: c# asp.net-web-api asp.net-core-3.1


    【解决方案1】:

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

    为了通过依赖注入访问控制器,您需要在ConfigureServices 方法中为IMvcCoreBuilder 或IMvcBuilder 调用AddControllersAsServices 扩展方法。

    services.AddControllers()
            .AddControllersAsServices();
    // or
    services.AddControllersWithViews() 
            .AddControllersAsServices();
    // or
    services.AddMvc()
            .AddControllersAsServices();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 2020-09-08
      • 2016-12-21
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多