.net core我是新手,我正尝试移植一些旧的.dot net代码。
到目前为止,我使用了大量的静态帮助器类。一个示例是名为“ 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类的正确方法吗,尽管现在很少在网站中使用这些util类,但这些类现在已通过Dependency Injection成为静态类?所有这些类的实例化,例如services.AddSingleton <...是否会减慢网站的启动过程?还是仅在首次使用时实例化它们?
希望您能理解我的担心。希望有人可以给我一些有关该主题的建议。将不胜感激!对不起,我的英语,最好的问候!
答案 0 :(得分:0)
是否会实例化所有这些类(例如services.AddSingleton <...),从而减慢网站的启动过程?
否。
向DI容器注册它们不会影响性能,只要在将它们添加到容器之前对其进行简单注册和初始化即可。
还是仅在首次使用它们时实例化它们?
这些单例仅在或如果需要它们的页面/类被初始化时才会被初始化
不经常使用它们的事实无关紧要。在系统中完全使用它们来执行其功能的事实是应应用久经考验的设计原则的原因。