ASP.NET Core 3.1不会在实现IPostConfigureOptions <T>的类上调用PostConfigure

问题描述

在我的ASP.NET Core 3.1应用程序中,我想在最后进行一些设置,因为它们仅依赖于在Startup.cs中注册的某些其他服务。有人可以帮助我了解为什么.NET Core永远不会调用实现IPostConfigureOptions<T>的类吗?

我有一个Options课,像这样:

public class MyTestOptions
{
    public string TestTest { get; set; }
}

通常,该方法在Startup.cs的{​​{1}}方法中使用。

ConfigureServices

我需要“最后”更改一些设置。因此,我实现了services.Configure<MyTestOptions>(o => { o.TestTest = "Test Test Test"; }); 接口。实现类如下所示。 (以下代码段未显示PostConfigure方法)。

IPostConfigureOptions<T>

然后将其注册到public class MyTestPostConfigure : IPostConfigureOptions<MyTestOptions> 的{​​{1}}方法中,如下所示。

Startup.cs

我也尝试以其他方式注册PostConfig类。

ConfigureServices

但是,无论如何都不会调用services.ConfigureOptions<MyTestPostConfigure>(); 。 我想念什么吗? **

  1. 为什么从不执行PostConfigure?
  2. 不是所有IPostConfigureOptions在启动过程中都会自动执行吗?还是有任何情况下.NET Core选择在实际需要时才运行它?**

解决方法

感谢@KirkLarkin在他对我的问题的评论中提供的投入。

未调用PostConfigure类上的MyTestPostConfigure方法,因为我没有在应用程序中的任何地方访问MyTestOptions的属性。

我已经将IOptions<MyTestOptions>作为依赖项注入了我的一个类,这就是调用MyTestPostConfigure的构造函数的原因。但是,由于我没有使用MyTestOptions类中的任何内容,因此.NET Core没有调用PostConfigure方法。

一旦访问了TestTest类的MyTestOptions属性,我就会看到.NET Core同时执行了ConfigurePostConfigure

简而言之, Configure<TOptions>IPostConfigureOptions<TOptions>的执行是按需执行的,并且延迟执行直到您“实际使用” TOptions属性为止。仅将其注入为依赖项并不会使.NET Core DI调用ConfigurePostConfigure方法。

(我不知道任何地方都记录了按需配置,或者我完全错过了这个基本知识。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...