gpt4 book ai didi

c# - 在 ASP.NET 5 中请求作用域服务

转载 作者:行者123 更新时间:2023-11-30 15:26:50 25 4
gpt4 key购买 nike

我正在努力让服务的范围限定为 ASP.NET 5 中的当前请求。我的启动代码如下所示:

public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IMyService, MyService>();
}

public void Configure(IApplicationBuilder app)
{
app.UseRequestServices();
app.UseMiddleware<MyMiddleware>();
}

public class MyMiddleware
{
RequestDelegate _next;
IMyService MyService;

public MyMiddleware(RequestDelegate next, IMyService myService)
{
_next = next;
MyService = myService;
}

public async Task Invoke(HttpContext context)
{
--> Here - context.RequestServices does not contain myService
}
}

传递给 MyMiddleware 构造函数的 IMyService 似乎不是请求范围的。它不是按请求处理的,在调用中间件时它没有在 HttpContext.RequestServices 中注册。

似乎我遗漏了一些明显的东西?

最佳答案

好的,以更简单的形式写出代码后,我意识到问题所在。

中间件不是 transient 的/范围内的,因此范围内的依赖项需要传递给 Invoke 方法而不是中间件的构造函数。

public class MyMiddleware
{
RequestDelegate _next;

public MyMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(HttpContext context, IMyService myService)
{
--> Now working. MyService is registered on context.RequestServices
}
}

关于c# - 在 ASP.NET 5 中请求作用域服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502587/

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