为了账号安全,请及时绑定邮箱和手机立即绑定

如何为所有函数请求重用对象实例?

如何为所有函数请求重用对象实例?

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 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信