我在 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/