我正在开发服务器端 Blazor 应用程序,并遇到了有关范围服务的一些问题。为了简单起见,我使用默认的 Blazor 模板(带有计数器的模板)重新创建了我的问题。
我有一个服务“CounterService”,它将计数器初始化为 1 并公开该计数器以及递增它的方法。非常基本:
public class CounterService
{
public int Counter { get; private set; }
public CounterService()
{
Counter = 1;
}
public void IncrementCounter()
{
Counter++;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我在 Startup.cs 中将此计数器注册为范围服务:`services.AddScoped()
然后我有一个自定义 ASP.NET 中间件,在本例中为“CounterInitializerMiddleware”。
public class CounterInitializerMiddleware
{
public CounterInitializerMiddleware(RequestDelegate next)
{
_next = next;
}
public RequestDelegate _next { get; }
public async Task Invoke(HttpContext context, CounterService counterService)
{
Console.WriteLine($"CounterInitializer invoked from request path: {context.Request.Path.Value}");
counterService.IncrementCounter();
counterService.IncrementCounter();
await _next(context);
}
}
public static …Run Code Online (Sandbox Code Playgroud) asp.net dependency-injection owin-middleware blazor blazor-server-side