c# - 在配置依赖注入之后,但在第一个 http 请求之前初始化一个单例
问题描述
我正在使用 Azure Functions 版本 2.x。它内置了对依赖注入的支持。
因此,我可以使用以下方法在单例范围内为 DI 注册服务 IMyService:
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IOther, DefaultOther>();
builder.Services.AddSingleton<IMyService, DefaultMyService>(); // IMyService depends on IOther.
}
}
DefaultMyService
函数第一次执行时会创建一个实例。这意味着第一个请求较慢,因为它会在内部进行大量初始化DefaultMyService
(它填充缓存等)。
问题:有没有办法DefaultMyService
在第一个请求之前创建?
对于 asp.net core 提出了一个类似的问题,那里的答案提出了一些解决方案,但它们都不能在函数应用程序的上下文中工作:
选项1:创建我的服务的实例(初始化发生在这里),然后注册实例(而不是注册类型)
var foo = new Foo();
services.AddSingleton<IFoo>(foo);
这不起作用,因为在我的情况下IMyService
依赖于其他服务,这些服务在我IMyService
在Configure
方法中注册时没有实例化。它失败并出现此处描述的错误。
选项 2:其他建议是使用重载的 Configure 方法:
public void Configure(IApplicationBuilder app, IFoo foo)
{
...
}
这也不起作用,因为在函数应用程序的情况下,唯一执行的配置方法是Configure(IFunctionsHostBuilder builder)
,并且不会调用其他重载。
解决方案
推荐阅读
- java - VScode Java/Maven环境问题不同电脑
- android - 与文本内联的 React-native 图标
- ios - 将 int ([3,6]) 数组转换为 [[1,2,3],[1,2,3,4,5,6]]
- python - Jupyter 文件打开未出现在新文件列表中
- excel - 将文件夹中的 .xlsx 文件保存为 .csv 文件
- python - 在 Python 中使用 Pywinauto 在特定按钮上按 Enter
- tin-can-api - 在 LMS 上使用 LRS 上的 oAuth 启动 xApi (TinCan) 包
- sql - 在 SQL 代理中安排 SP
- java - 无法检查扫描仪输入是否在数组列表中
- android - Kotlin - 忽略 id 的主键约束 - Android