.net 核心依赖注入与很少使用的静态 class

.net core Dependency Injection vs rarely used static class

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

到目前为止,我使用了很多静态助手 classes。一个示例是名为 'ImageUtilities' 的 class,它提供静态方法,如 'ResizeImage(..' 或 'ResizeAndSavePNG(..' 等。或者另一个 class 是 'DateUtilities',方法如 'GetCalendarWeek(..' 或 'GetDaysBetween(..' 这只是一些示例,可以是任何静态 class.

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

现在在我的初创公司中 class 我有很多这样的代码..

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

ImageShorpProcessor 是一个 class 代表我的 'old' class 'ImageUtilities' 的旧 .net 网络代码。如果 class 现在需要调用其中一些方法,我会在构造函数中传递带有依赖注入的 class ImageSharpProcessor。这非常有效,我希望这是实现它的方法。

但在我的应用程序中,ImageSharpProcessor class 很少被用作示例。这就是我开始担心的地方。该网站 99% 的用户不会使用代码中使用此 class 的页面。这同样适用于许多其他辅助方法,这些方法以前是静态的 classes 但现在是与依赖注入一起使用的方法。

问题: 这是使用这种 util classes 的正确方法吗,它以前是静态的 classes 现在带有依赖注入,尽管它们很少在网站中使用过?所有那些 class 的实例化,如 services.AddSingleton<... 是否会减慢网站的启动过程?还是只在第一次使用时实例化?

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

Does the instantiation of all those classes like services.AddSingleton<... slow down the startup process of the Website?

没有。

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

Or are they instantiated only at the point where they are used for the first time?

那些单例只会在需要它们的 page/class 初始化时或如果初始化


它们不经常使用的事实并不重要。事实上,在系统中完全使用它们来执行其功能是应该应用经过实践检验的设计原则的原因。