我想在服务器端Blazor中的单例服务的方法中使用作用域服务。我发现你可以在函数参数中使用[FromServices]
属性,但当我调用该方法时,我会因为调用参数较少的方法而遇到编译器错误。我试着用一个伪参数调用这个方法,希望它在被调用时会被覆盖,但事实并非如此。
范围服务:
public class UserContext
{
public string SomeUserRelatedData {get; set;}
}
Singleton服务:
public class GlobalService
{
...
public void DoSomethingWithUserData([FromServices]UserContext usercontext)
{
...
}
}
启动.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<GlobalService>();
services.AddScoped<UserContext>();
}
}
遗憾的是,您无法做到这一点。
只能在框架调用的方法中使用此[FromServices]
。在这种情况下,在来自控制器的任何操作中或在中间件中的Invoke
方法中。
但是你的问题有一个解决办法。我假设调用DoSomethingWithUserData
的方法是scope。在该类(或方法,如果它是端点(中,您可以注入UserContext
,并使用该实例从GlobalService
调用方法。