【问题标题】:Static class Vs injection in Blazor serverBlazor 服务器中的静态类与注入
【发布时间】:2020-07-16 15:36:47
【问题描述】:

我是一名 WPF 开发人员。我是开发 ERP 应用程序的团队的一员。我想将应用程序转换为适用于 Web 的 Blazor Server。我是网络技术和 Blazor 的新手。

我们有一个静态类,它有近 50 个属性(只有属性,没有方法),用于在应用程序级别存储某些数据。我们在用户登录时设置这些属性值。之后,我们会在需要时使用这些值。

现在我的问题是,如何在 Blazor 中使用这个类?我在网上搜索了两种方法。

  1. 添加单例服务。在需要的地方注入它并使用它的值。
  2. 在需要的地方直接使用静态类,无需服务注入。

就我而言,哪种方法最好,为什么?

【问题讨论】:

    标签: blazor blazor-server-side


    【解决方案1】:

    这两种方法都可以“在语法上”正确,但依赖注入将为您提供最佳的灵活性。自从过渡到 .NET Core 之后,DI 就集成在了框架中,所以实现起来相当简单(虽然一开始很难驾驭它)。

    无论如何,阅读您的问题,您似乎假装存储一些与用户相关的数据以供以后使用。如果是这种情况,那么 singleton 将不是最佳选择,因为您现在处于多用户环境中,并且所有用户每次都将访问同一个实例。

    您应该创建一个为每个用户创建该类的工厂,然后在 DI 上将其注册为 scoped,因为这种对象会持续用户的所有会话。

    您将在此处找到一份来自 Microsoft 的有用文档,其中介绍了您想要实现的目标,包括模式和实践:

    Configuration Dependency Injection

    最好的问候

    【讨论】:

    • 您建议将 Di 注册为 transient 。因此,在这种情况下,当我注入此类时,每次它都会重置值,因此注册为瞬态类是否正确
    • DI 不会重置任何东西。它应该做的是从源代码重新加载它。我已经通过指向您正在尝试做的事情的基础和模式文档的链接更新了答案。如果有用,请将答案标记为已接受。最好的问候
    • 感谢您的链接。我会检查并告诉你。正如我在 Microsoft 文档中看到的那样,瞬态服务在从组件注入时会创建新实例
    • 对不起...这是我的错。我不应该在凌晨 3 点回答如此技术性的问题……我的意思是 SCOPED,而不是暂时的。再次抱歉并致以最诚挚的问候
    • 无论如何不要抱歉,再次感谢您的回复。范围服务在我的情况下有一个问题,每当用户重新加载浏览器时,类就会恢复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多