服务器端Blazor中构造函数外部的依赖项注入



我想在服务器端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调用方法。

最新更新