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

使用 IServiceCollection.AddSingleton() 的单个对象实例

使用 IServiceCollection.AddSingleton() 的单个对象实例

C#
智慧大石 2021-11-21 16:33:24
根据您的问题,您在 Page 构造函数上调用 API,这就是为什么加载 Web API 然后在 page2 上导航需要时间。如果您想在加载 api 之前在 page2 上导航。检查下面的代码    public partial class Page2 : ContentPage        {            bool IsLoading{ get; set; }            public Page2()            {                InitializeComponent();                  IsLoading = false;          }             protected async override void OnAppearing()            {                base.OnAppearing();                if (!IsLoading)                {                  IsLoading=true                  **Call the Web API Method Here**                }                IsLoading=false            }         }Startup.cs / ConfigureServices() 中的哈希码:任何控制器/api 调用中的哈希码: 该GetHashCode()方法未被篡改。这导致来自 appsettings.json 的配置未在控制器/api 调用中应用,所有属性都使用它们的默认值/null 进行实例化。我希望使用该AddSingleton()方法可以注入相同的实例并在整个应用程序生命周期中重用它。有人能告诉我为什么要创建一个新的 RuntimeServices 实例吗?我将如何存档我的目标,即在 Startup.cs中拥有一个可用的对象实例并仍然访问我的控制器中的相同对象实例?我的首选解决方案是通常的单例模式。但我希望使用 asp.net core 提供的内置功能来解决这个问题。
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

因为这个调用:

services.AddSingleton(runtimeServices);

注册 的实例RuntimeServices,它不配置IOptions<RuntimeServices>. 因此,当您请求 an 时IOptions<RuntimeServices>,却没有,您将获得一个具有所有默认值的新实例。

您想要:

  1. 保持AddSingleton和使用public ApplicationController(RuntimeServices services)

  2. 删除AddSingleton调用并使用services.Configure<RuntimeServices>(_configuration)


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 590 浏览

添加回答

举报

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