【问题标题】:.net core Dependency Injection vs rarely used static class.net core 依赖注入 vs 很少使用的静态类
【发布时间】:2020-03-20 19:44:12
【问题描述】:

我是 .net 核心的新手,我正在尝试移植一些旧的 .dot 网络代码。

到目前为止,我一直在使用大量静态辅助类。一个例子是一个名为“ImageUtilities”的类,它提供了“ResizeImage(..”或“ResizeAndSavePNG(..”)等静态方法。或者另一个类是“DateUtilities”,它提供了“GetCalendarWeek(..”或“ GetDaysBetween(..' 这只是一些示例,可以是任何静态类。

无论何时我需要其中一种方法,我都会调用它们。使用 .net core 我仍然可以做到这一点,但我想改进我的代码并尝试遵循最佳实践指南。这就是我将其更改为使用依赖注入的原因。

现在在我的启动课程中,我有很多这样的代码..

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IImageProcessor, ImageSharpProcessor>();
    services.AddSingleton<...
    services.AddSingleton<...
    services.AddSingleton<...
}

ImageShorpProcessor 是一个代表旧 .net 网络代码的“旧”类“ImageUtilities”的类。如果一个类现在需要调用其中一些方法,我会在构造函数中通过依赖注入来传递该类 ImageSharpProcessor。这非常有效,我希望这是这样做的方法。

但在我的应用程序中,很少使用 ImageSharpProcessor 类作为示例。这就是我的担忧开始的地方。网站 99% 的用户不使用代码中使用此类的页面。这同样适用于许多其他帮助方法,它们曾经是静态类,但现在是与依赖注入一起使用的方法。

问题: 这是使用此类 util 类的正确方法吗?尽管它们很少在网站中使用,但它们现在是带有依赖注入的静态类?所有这些类的实例化,如 services.AddSingleton<...>

希望您能理解我的担忧。希望有人可以就该主题给我一些建议。将不胜感激!对不起我的英语,最好的问候!

【问题讨论】:

    标签: dependency-injection .net-core static-classes


    【解决方案1】:

    所有这些类(如 services.AddSingleton<...>

    没有。

    向 DI 容器注册它们不会影响性能,前提是它们只是简单地注册并且在将它们添加到容器之前没有初始化。

    还是仅在第一次使用时才实例化它们?

    那些单例只有在需要它们的页面/类被初始化时才会被初始化


    它们不经常使用的事实并不重要。事实上,它们在系统中完全被用于执行其功能,这就是为什么应该应用经过尝试和实践的设计原则的原因。

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 2023-02-24
      • 2020-11-20
      • 2019-08-08
      • 2021-10-23
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      相关资源
      最近更新 更多