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

根据您的问题,您在 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() 中的哈希码:

http://img4.mukewang.com/619a04710001397004050043.jpg

任何控制器/api 调用中的哈希码: 

http://img2.mukewang.com/619a0480000120bb04160038.jpg

GetHashCode()方法未被篡改。这导致来自 appsettings.json 的配置未在控制器/api 调用中应用,所有属性都使用它们的默认值/null 进行实例化。

我希望使用该AddSingleton()方法可以注入相同的实例并在整个应用程序生命周期中重用它。有人能告诉我为什么要创建一个新的 RuntimeServices 实例吗?我将如何存档我的目标,即在 Startup.cs中拥有一个可用的对象实例并仍然访问我的控制器中的相同对象实例

我的首选解决方案是通常的单例模式。但我希望使用 asp.net core 提供的内置功能来解决这个问题。


智慧大石
浏览 591回答 1
1回答

拉莫斯之舞

因为这个调用:services.AddSingleton(runtimeServices);注册 的实例RuntimeServices,它不配置IOptions<RuntimeServices>.&nbsp;因此,当您请求 an 时IOptions<RuntimeServices>,却没有,您将获得一个具有所有默认值的新实例。您想要:保持AddSingleton和使用public ApplicationController(RuntimeServices services)删除AddSingleton调用并使用services.Configure<RuntimeServices>(_configuration)
打开App,查看更多内容
随时随地看视频慕课网APP