亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為所有函數請求重用對象實例?

如何為所有函數請求重用對象實例?

C#
犯罪嫌疑人X 2023-07-22 16:56:18
我正在開發一個天藍色的函數,它可以對對象進行依賴注入,我想知道我能做什么,在構造函數中僅創建一次實例(當我將函數部署到生產環境時),并在其他函數請求時重用創建的第一個實例。我對要重用的對象進行了注入依賴,但它不起作用。
查看完整描述

2 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

在函數的多個實例中重用資源的方法是將其聲明為static. 例如,假設我想重用HttpClient:


public static class PeriodicHealthCheckFunction

{

    private static HttpClient _httpClient = new HttpClient();


    [FunctionName("PeriodicHealthCheckFunction")]

    public static async Task Run(

        [TimerTrigger("0 */5 * * * *")]TimerInfo healthCheckTimer,

        ILogger log)

    {

        string status = await _httpClient.GetStringAsync("https://localhost:5001/healthcheck");


        log.LogInformation($"Health check performed at: {DateTime.UtcNow} | Status: {status}");

    }

}


查看完整回答
反對 回復 2023-07-22
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

C# 中沒有像 Native C++ 那樣的“函數作用域”變量。但是您可以使用許多類似的構造:

使用 Public get 但 private Set 創建一個屬性。這樣,只有類代碼(如構造函數)可以設置值。您會看到這種模式在 .NET Framework 中被大量使用。然而,它并不能真正避免意外地在類代碼中設置值。如果您從不在類代碼中的其他任何地方使用此值,效果最好。

另一個選項是“只讀”變量屬性。它強制要求該值必須設置一次(在構造函數中),但也只能設置一次。您仍然需要將實例交給構造函數或使用靜態。

另一種選擇是添加靜態變量來存儲數據。但這種模式是絕對不可取的。如果您永遠不需要第二組具有不同共享值的實例,那么您就輸了。這將會發生,就像垃圾收集一樣。我們有數十年的靜態價值觀適得其反的經驗。所以你真的應該保留實例變量。

另一種方法是添加工廠方法。如果實例需要設置,而您不能讓普通程序員使用您的代碼,則通常會使用它們。您甚至可以通過同時擁有公共構造函數和實例工廠方法來稍微打破該模式。如果您使用工廠方法,共享的東西將從它們調用的實例中復制過來。如果您使用公共構造函數,則會創建一個新的共享事物。


查看完整回答
反對 回復 2023-07-22
  • 2 回答
  • 0 關注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號