c# - Azure 函数 - 你可以在函数范围之前访问 IServiceProvider 吗?
问题描述
嗨,我有一个用例,希望在天蓝色函数项目中的函数调用之前获得对 IServiceProvider 的访问权限。
尝试:
使用 IWebJobsStartup cs 文件,我可以在函数调用之前访问 serviceCollection。最后我尝试了这段代码
var serviceProvider = services.BuildServiceProvider(); serviceProvider.GetRequiredService<IAccountAPITests>();
错误消息“System.InvalidOperationException: 'Unable to resolve service for type 'Microsoft.Azure.WebJobs.Script.IFileLoggingStatusManager' while trying to activate 'Microsoft.Azure.WebJobs.Script.Diagnostics.HostFileLoggerProvider'.'”
到目前为止,我唯一可以访问 IServiceCollection 是在我的功能中
public TestAutomationFunction
(
IServiceProvider rootServiceProvider
)
{
_integrationTestService = rootServiceProvider.GetRequiredService<IIntegrationTestService>();
}
这很好用,但问题是函数是作用域的,因此在其中解决的任何问题都将绑定到其相同的作用域。
我尽力描绘了为什么我在 ASP.net 中没有这个问题以及为什么我在函数中这样做。
我想在函数调用之前访问 IServiceProvider 以确保我的服务不在同一范围内。或者在调用该函数后,在一个单独的范围内解析我的服务。
我当然可以将 Package X 单例更改为范围,但我的用例并不像它在我的堆栈深处那么简单,我必须一直这样做。
解决方案
这并没有完全回答我的问题,但它使我的问题成为一个静音点。
“不要从单例中解析范围服务。这可能会导致服务在处理后续请求时出现不正确的状态。可以从范围或临时服务中解析单例服务。”
我将重新处理我的堆栈以防止这种情况发生,之后我将不必担心这个问题。
推荐阅读
- android - 将 SDK 从 29 降级到 SDK 28 后应用程序无法运行
- python - 匹配 CSV 文件中的文件名,然后将这些文件移动到新目录
- c# - 具有多对多和 IncludeMembers 的 Automapper
- mysql - 如何计算加入表mysql
- php - 无法在 laravel 控制器中返回视图
- c++ - 假设在没有锁的线程中更改全局布尔变量是安全的吗?
- javascript - 我正在尝试编写一个名为oddsUpTo 的程序,该程序返回一个数组,其中每个奇数最多为给定数字
- reactjs - 当 useCallback 似乎没有帮助时,如何解决“React Hook useEffect 缺少依赖项...”。我需要将我的 API_KEY 添加为依赖项
- java - 如何在 Kotlin/Java 中对相同的方法调用进行排队
- python-3.x - Python __ror__ 和 dict 项上的其他二进制方法?