gpt4 book ai didi

c# - 在 ASP.NET Core 的中间件中注入(inject)服务

转载 作者:行者123 更新时间:2023-12-04 06:56:16 26 4
gpt4 key购买 nike

我想基于 HTTP header 值注入(inject)服务。所以我有 2 个类 - DbDataProvider 和 InMemDataProvider,它们都是从 IDataProvider 实现的。每当进行 API 调用时,客户端都会传递一个 header ,以确定是需要 DbDataProvider 还是需要 InMemDataProvider。我该如何做到这一点?所以简而言之,我需要在其中一个中间件的 ServiceCollection 中注入(inject)服务。那可能吗?

问题是在 Startup 类的 ConfigureService 方法中我无法获取 HttpContext。我已经编写了一个中间件,使用它可以获取 HTTP 上下文,但是如何在那里注入(inject)服务?

最佳答案

您可以在 Startup.cs 中的 DI 配置中实现这一点.
他们的关键是services.AddHttpContextAccessor()它允许您访问 HttpContext。

services.AddHttpContextAccessor();

services.AddScoped<DbDataProvider>();
services.AddScoped<InMemDataProvider>();
services.AddScoped<IDataProvider>(ctx =>
{
var contextAccessor = ctx.GetService<IHttpContextAccessor>();
var httpContext = contextAccessor.HttpContext;

// Whatever the header is that you are looking for
if (httpContext.Request.Headers.TryGetValue("Synthetic", out var syth))
{
return ctx.GetService<InMemDataProvider>();
}
else
{
return ctx.GetService<DbDataProvider>();
}
});

关于c# - 在 ASP.NET Core 的中间件中注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174474/

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