c# - 配置 DI 后 ASP.NET Core 初始化单例

标签 c# asp.net-core dependency-injection singleton

因此,假设我在 DI 中注册了一个单例类实例,如下所示:

services.AddSingleton<IFoo, Foo>();

让我们说 Foo类有许多其他依赖项(主要是允许它加载数据的存储库类)。

根据我目前的理解,Foo 实例在第一次使用(被询问)之前不会被创建。除了构造函数之外,还有其他方法可以初始化此类吗?喜欢就在之后 ConfigureServices()完成?还是应该在 Foo 的构造函数中完成初始化代码(从 db 加载数据)?

(如果这个类可以在第一次使用之前加载它的数据以加快首次访问速度,那就太好了)

最佳答案

在启动时自己做。

var foo = new Foo();
services.AddSingleton<IFoo>(foo);

或者“热身”
public void Configure(IApplicationBuilder app) 
{
    app.ApplicationServices.GetService<IFoo>();
}

或者
public void Configure(IApplicationBuilder app, IFoo foo) 
{
    ...
}

但是如果你在构造函数中做了一些你不应该做的事情,这感觉很脏,而且更像是你的设计的问题。类实例化必须很快,如果你在其中进行长时间运行的操作,你就会违反一系列最佳实践,需要重构你的代码库而不是寻找绕过它的方法

关于c# - 配置 DI 后 ASP.NET Core 初始化单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39005861/

相关文章:

c# - 是否可以在多个应用程序域中并行运行相同的应用程序?

asp.net-core - 无法执行 dotnet swagger 命令

c# - 同一类型的多个实例

java - 在 Dagger 中的 @Provides 方法内使用注入(inject)

c# - 是否保证多个 ninject 绑定(bind)保持其绑定(bind)顺序

C# 更改 GUID 的前 32 位 Int

c# - 将 Node JS 转换为 C# 以加载 WAV 格式的音频并删除一些不必要的 header

c# - C# 中的正则表达式匹配获取不包含模式的字符串组

c# - 如何从 Main 中获取 IConfiguration?

c# - ASP.Net Core 1 日志记录错误 - 无法找到来自源应用程序的事件 ID xxxx 的描述