【问题标题】:Dependency Injection outside a constructor in Server-side Blazor服务器端 Blazor 中的构造函数外部的依赖注入
【发布时间】:2020-09-18 10:37:05
【问题描述】:

我想在服务器端 Blazor 中的单例服务方法中使用范围服务。 我发现您可以在函数参数中使用[FromServices] 属性,但是当我调用该方法时,由于使用较少参数调用该方法而出现编译器错误。 我尝试使用虚拟参数调用该方法,希望在调用时它会被覆盖,但事实并非如此。

范围服务:

public class UserContext
{
    public string SomeUserRelatedData {get; set;}
}

单例服务:

public class GlobalService
{
    ...
    public void DoSomethingWithUserData([FromServices]UserContext usercontext)
    {
        ...
    }
}

Startup.cs

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddSingleton<GlobalService>();
        services.AddScoped<UserContext>();
    }
}

【问题讨论】:

  • 不确定这是否仅适用于控制器? “指定应使用 request 服务绑定操作参数。” - FromServicesAttribute

标签: c# asp.net-core dependency-injection blazor


【解决方案1】:

很遗憾你不能这样做。

你只能在框架调用的方法中使用这个[FromServices]。在这种情况下,来自控制器的任何操作或中间件中的 Invoke 方法。

但是您的问题有一个解决方案。我假设调用DoSomethingWithUserData 的方法是作用域。在该类(或方法,如果它是一个端点)中,您可以注入您的 UserContext 并使用该实例从 GlobalService 调用该方法。

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 2018-12-03
    • 2018-06-17
    • 2011-02-02
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多