gpt4 book ai didi

c# - 在 Startup.ConfigureServices 方法期间访问依赖注入(inject)对象

转载 作者:行者123 更新时间:2023-12-04 01:37:09 25 4
gpt4 key购买 nike

我有一个 ASP.NET Core 3 应用程序,并且正在使用 AzureAD 进行身份验证。我的 Startup.ConfigureSerivces 方法中有以下几行,其目的是在附加 cookie 时执行一些业务规则。

services.Configure<CookiePolicyOptions>(options => {
options.CheckConsentNeeded = ctx => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.OnAppendCookie = ctx => {
var svc = ctx.Context.RequestServices.GetRequiredService<IUserInformationService>();
// do something with svc
};
});
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => {
Configuration.Bind("AzureAd", options);
});

这很好用,我得到了注入(inject) IUserInformationService OnAppendCookie 中预期的对象方法和 AzureAD 信息取自 appsettings.json。

然而,最近,有关 AzureAD 租户的信息不能驻留在 appsettings.json 中,而我现在必须查阅数据库。我有一个已经查询数据库并获取 AD 设置的服务。就像是:
public interface IAzureADConfiguration {
void Configure(AzureADOptions options);
}

但是,我在调用 AddAzureAD 时找不到检索注入(inject)服务的方法。 .我想要的是这样的:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => {
var svc = ???
svc.Configure(options);
Configuration.Bind("AzureAd", options);
});

由于我无法访问 HttpContextAddAzureAD我在 OnAppendCookie 中所做的方法.有没有办法在这个阶段获得注入(inject)的对象?我不想对实例进行硬编码,因为此要求将来可能会发生变化(即添加另一种方法来配置我获取 Azure 广告设置的位置)。提前致谢!

最佳答案

内部 AddAzureAD最终将调用 ConfigureAzureADOptions .
要利用该过程,请创建自定义 IConfigureOptions<T>这取决于您的服务

public class AzureADOptionsSetup : IConfigureOptions<AzureADOptions> {
private readonly IAzureADConfiguration service;

public AzureADOptionsSetup(IAzureADConfiguration service) {
this.service = service;
}

public void Configure(AzureADOptions options) {
service.Configure(options);
}
}
并确保将其注册到服务集合中
services.AddTransient<IConfigureOptions<AzureADOptions>, AzureADOptionsSetup>();
这将确保您的自定义选项配置有机会对选项类进行操作。
引用 Use DI services to configure options

关于c# - 在 Startup.ConfigureServices 方法期间访问依赖注入(inject)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com