gpt4 book ai didi

asp.net - 我可以在自定义中间件中添加新的范围服务吗?

转载 作者:行者123 更新时间:2023-12-03 18:41:43 25 4
gpt4 key购买 nike

我在 Asp .Net Core 中使用 WebApi,我想知道是否/如何添加一个新的范围服务,所有后续中间件和 Controller 都可以通过依赖注入(inject)访问?还是我应该与 HttpContext.Items 共享状态?这似乎不是它的目的,因为 HttpContext 在 WebApi Controller 中根本不可用?

如果 HttpContext 或 DI 都不是正确的工具,那么我如何在请求管道中传播状态而不从一开始就创建它?

最佳答案

首先在您的 ConfigureServices(IServiceCollection services) 中添加您的范围服务

services.AddScoped<IMyService, MyService>();

然后,我知道将作用域服务注入(inject)中间件的唯一方法是将其注入(inject)中间件的 Invoke 方法
public class MyMiddleware
{
private readonly RequestDelegate _next;

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

public async Task Invoke(HttpContext httpContext, IMyService service)
{
service.DoSomething();
await _next(httpContext);
}
}

默认情况下,注入(inject) MyMiddleware 的构造函数会使其成为单例,因为它仅在启动时调用。每次调用 Invoke 并且依赖注入(inject)将获取作用域对象。

关于asp.net - 我可以在自定义中间件中添加新的范围服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42984052/

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