如何解决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>();
。
我想念什么吗?
**
- 为什么从不执行PostConfigure?
- 不是所有IPostConfigureOptions在启动过程中都会自动执行吗?还是有任何情况下.NET Core选择在实际需要时才运行它?**
解决方法
感谢@KirkLarkin在他对我的问题的评论中提供的投入。
未调用PostConfigure
类上的MyTestPostConfigure
方法,因为我没有在应用程序中的任何地方访问MyTestOptions
的属性。
我已经将IOptions<MyTestOptions>
作为依赖项注入了我的一个类,这就是调用MyTestPostConfigure
的构造函数的原因。但是,由于我没有使用MyTestOptions
类中的任何内容,因此.NET Core没有调用PostConfigure
方法。
一旦访问了TestTest
类的MyTestOptions
属性,我就会看到.NET Core同时执行了Configure
和PostConfigure
。
简而言之, Configure<TOptions>
和IPostConfigureOptions<TOptions>
的执行是按需执行的,并且延迟执行直到您“实际使用” TOptions
属性为止。仅将其注入为依赖项并不会使.NET Core DI调用Configure
和PostConfigure
方法。
(我不知道任何地方都记录了按需配置,或者我完全错过了这个基本知识。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。