gpt4 book ai didi

Startup.Configure 中的 ASP.NET Core 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 21:55:55 24 4
gpt4 key购买 nike

我正在使用 Cookie 中间件对用户进行身份验证。我一直在关注this official tutorial .

在我的Startup类,摘自我的Configure方法如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// ...

// Cookie-based Authentication
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme,
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Events = new CustomCookieAuthenticationEvents(app),
});

// ...
}
CustomCookieAuthenticationEvents类定义如下:
public class CustomCookieAuthenticationEvents : CookieAuthenticationEvents
{
private IApplicationBuilder _app;
private IMyService _myService = null;
private IMyService MyService
{
get
{
if(_myService != null)
{
return _myService;
} else
{
return _myService = (IMyService) _app.ApplicationServices.GetService(typeof(IMyService));
}
}
}

public CustomCookieAuthenticationEvents(IApplicationBuilder app)
{
_app = app;
}

public override async Task ValidatePrincipal(CookieValidatePrincipalContext context)
{
string sessionToken = context.Principal.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Sid)?.Value;
LogonSession response = null;

var response = await MyService.CheckSession(sessionToken);

if (response == null)
{
context.RejectPrincipal();
await context.HttpContext.Authentication.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
}
}
}

由于依赖注入(inject)在 Startup.Configure 不可用(当时甚至没有注册服务),我做了一些解决方法:
  • 将 IApplicationBuilder 服务传递给 CustomCookieAuthenticationEvents类(class)
  • 获取 IMyService在只读属性内的第一次请求(单例模式)

  • tl;博士

    我的解决方案 作品 ,但它是 .不涉及依赖注入(inject),因为当时不可能。

    问题的本质是我必须实例化 CustomCookieAuthenticationEvents .据我阅读 source code , 没有办法解决这个问题,因为 UseCookieAuthentication如果我省略 options 则抛出异常范围。

    有什么建议可以使我当前的解决方案更好吗?

    最佳答案

    Startup.ConfigureServices() 在 Startup.Configure() 之前被调用(更多信息见 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup)。所以当时可以使用依赖注入(inject);)
    因此,您可以像这样解决您对配置方法的依赖:

    app.ApplicationServices.GetRequiredService<CustomCookieAuthenticationEvents>()

    关于Startup.Configure 中的 ASP.NET Core 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410498/

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