我使用 Auth0 的 SDK 进行身份验证,并且在他们的示例代码中,他们创建了一个事件侦听器,例如OnRedirectToIdentityProviderForSignOut()在ConfigureServices().
我需要做一些类似的事情,并添加一些我自己的代码,当这样的事件被触发时,这些代码会对数据库进行一些日志记录和读/写操作。
如何在 OnRedirectToIdentityProviderForSignOut() 等事件处理程序中解析服务?
像这样的评论表明我不解析实例,ConfigureServices()因为 a) 这ServiceProvider将与 ASP.NET Core 在处理请求时使用的不同 b) 所有实例的生命周期都是不确定的(根据我的理解)
如何在我的 Auth0 事件处理程序中解析实例(例如:OnRedirectToIdentityProviderForSignOut())它与 ASP.NET Core 在处理 HTTP 请求时使用的实例相同,以便在 HTTP 请求结束时销毁作用域服务?
我担心内存泄漏。
一些示例代码来帮助澄清我的意思(检查评论)
public class Startup {
//...
public virtual void ConfigureServices(IServiceCollection services) {
//...
services.AddOpenIdConnect("Auth0", options => {
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = async e =>
{
//How do I get instances of my services (eg: ILogger<Startup>) at this point? I want to avoid calling services.BuildServiceProvider()
//because it won't be the same service provider that ASP.NET Core will use to service HTTP request and thus will cause memory leaks
},
});
}
}
Run Code Online (Sandbox Code Playgroud)
检查预感后,事件委托的事件参数是TicketReceivedContext Class它可以让您访问HttpContext.
//...
services.AddOpenIdConnect("Auth0", options => {
options.Events = new OpenIdConnectEvents {
OnTicketReceived = async e => {
//How do I get instances of my services (eg: ILogger<Startup>) at this point?
IServiceProvider serviceProvider = e.HttpContext.RequestServices;
var logger = serviceProvider.GetService<ILogger<Startup>>();
//...
},
};
});
//...
Run Code Online (Sandbox Code Playgroud)
其他事件/处理程序也可以遵循类似的格式
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |