【问题标题】:.NET Maui how to make use of IOptionsSnapshot.NET Maui 如何使用 IOptionsSnapshot
【发布时间】:2023-01-27 20:55:10
【问题描述】:

基本上,我试图解决这样一个事实,即您不能真正在 Maui 中使用 IOptionsSnapshot,因为 appsettings.json 文件一旦与应用程序捆绑在一起就固定不变。

Configuration["key"] = myValue手动更新IConfiguration 然后要求通知所有范围内的服务或单例以检索其IOptionsSnapshot 属性的新实例。 是的,我需要在运行时更新这些选项。 (甚至 autofac 从这里移动)

所以我要么使用 ApiControllers,它们是应用程序本地的瞬态,我不知道 Maui 是否支持它们,所以请求总是有更新的选项。 或者我使用瞬态服务并在每次需要时手动解决它们

using var scope = scopeFactory.CreateScope();
var service = scope.ServiceProvider.GetRequiredService<MyTransientService>()

【问题讨论】:

    标签: c# asp.net-core maui


    【解决方案1】:

    好的,你需要做一些事情。

    首先,创建一个设置服务,用于存储和读取小的键值对:

    https://stackoverflow.com/a/74402836/6643940

    现在您必须确保每个人都收到有关更改的通知。

    就我而言,这很容易:

    使用 CommunityToolkit.Mvvm,我实现了消息传递。

    设置属性会向关心这些更改的人发送消息。如果有东西在运行,并且已经订阅了那条消息,它就会收到它。

    否则我会开火,没人听(这不是坏事)。

    对我来说好的是,我什至在我想检测变化的地方都没有这个服务。一切都是解耦的。

    确实使用此服务的东西无论如何都会获得新值,并且由于这是单例,您可以添加将为每个人更新的其他属性。

    这里有趣的部分是您必须编写的自定义代码。在一个地方,您可能有 HttpClient 的 BaseAddress 设置。记住你必须在更改时重新构造它,祝你好运。

    人们在运行时不这样做是有原因的。您将用错误感染您的代码。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2021-10-21
      • 2023-01-12
      • 2022-12-24
      • 2022-08-02
      • 2022-10-18
      • 2022-07-13
      • 2022-06-25
      • 2022-12-27
      相关资源
      最近更新 更多