我觀察到,在以 1 分鐘為間隔執行以下函式的所有程序中,hashCodeof_serviceProvider 是相同的。
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System;
namespace TestFunction
{
public class Function2
{
private readonly IServiceProvider _serviceProvider;
public Function2(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
[FunctionName("Function2")]
public void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log)
{
var hashCode = _serviceProvider.GetHashCode();
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
版本:
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
僅供參考:我還比較了同一端點的兩個請求中的hashcodeserviceProvider ,API但它們是不同的。
問題:時間觸發器 Azure Functions 中 IServiceProvider 的生命周期是多少?
uj5u.com熱心網友回復:
謝謝@akash,更新。
基于此MS DOC:
對于 Functions 應用程式,不同的服務生命周期表現如下:
瞬態:瞬態服務是根據服務的每個解析度創建的。
Scoped:范圍服務生命周期與函式執行生命周期相匹配。每次函式執行都會創建一次作用域服務。在執行期間對該服務的后續請求會重用現有的服務實體。
單例:單例服務生命周期與主機生命周期匹配,并在該實體上的函式執行之間重用。建議為連接和客戶端使用單例生命周期服務,例如 DocumentClient 或 HttpClient 實體。
在 GitHub 上查看或下載不同服務生命周期的示例。
有關更多資訊,請參閱以下鏈接:
SO THREAD:Azure Function V3 依賴注入生命周期
博客:Azure Functions 中的依賴注入
uj5u.com熱心網友回復:
IServiceProvider只是服務集合的一個介面。但它是由例如ASP.NET 中使用的HttpContext實作的。HttpContext 有一個請求的生命周期,即它是 Scoped。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401354.html
