【问题标题】:How can I use/inject a service in a "normal" c# class like in Blazor @inject ClassName classObject如何在 Blazor @inject ClassName classObject 中的“普通”c# 类中使用/注入服务
【发布时间】:2020-10-25 03:26:03
【问题描述】:

我有一个 Blazor 项目,在 Startup.cs 中我添加了一个服务

        public void ConfigureServices(IServiceCollection services)
        {
           ....
            services.AddSingleton<Models.UserVisit>();
        }

我可以像这样在 razor/blazor 页面上使用/访问该服务:

       @inject Models.UserVisit userVisitObj

(UserVisit 是 Models 文件夹中的“普通”C# .cs 类)

我不知道如何在没有 razorpage 的普通 C# 类中使用这个“userVisitObj”(我将在其中使用@inject)?

如何在此处使用它(同一项目中的普通 C# 类,但没有 blazor/razor-componentpage):

public class UserModel
{
    [BsonId]
    public Guid Id { get; set; }
    public CultureInfo UserCultureInfo { get; set; }
    ...

    public UserModel()
    {
        [Inject]
        Models.UserVisit userVisitObj;   // THAT DOESN'T WORK -- ERROR
    }
}

我希望我能把我的问题说清楚一些(请善待我还是个初学者)。

【问题讨论】:

  • 一般情况下,您只需关注standard dependency injection。因此,在您的情况下,UserModel() 构造函数会将Models.UserVisit 作为参数。但是如何解决这个问题取决于您构建UserModel 类的方式/位置

标签: c# class service blazor inject


【解决方案1】:

您可以按如下方式使用构造函数注入:

private readonly Models.UserVisit _userVisitObj
public UserModel(Models.UserVisit userVisitObj)
{
      _userVisitObj = userVisitObj;
 
}

请注意,这适用于普通 C# 类。

如果你的类是组件类,你需要使用 Inject 属性和 公共财产,例如:

[Inject]
public Models.UserVisit UserVisit {get; set;}

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 2020-01-29
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多