gpt4 book ai didi

c# - ASP.NET Core 在运行时替换单例实例

转载 作者:行者123 更新时间:2023-11-30 17:27:50 26 4
gpt4 key购买 nike

我需要在 ASP.NET Core 应用程序的生命周期内将一个对象保留在内存中,在该应用程序中我序列化该对象并将其作为快照存储在持久存储中。稍后在对象的生命周期中,我需要通过反序列化它并替换单例来恢复该对象的状态。它不一定是单例,但我需要保证只有一个对象实例。

我尝试了以下方法,但它似乎只为当前请求替换了它,之后什么也没有。我假设 DI 容器制作了它自己的对象副本,但我不确定

internal static SingleObject SingleObject { get; set; } = new SingleObject();

services.AddSingleton<OrderBook>(SingleObject)

有没有办法替换单例实例,或者我是否必须推出自己的单例类来处理这种情况?

最佳答案

我有一个 CachedData 的单例,直到意识到需要在某个时候快速重置它。所以只是实现了一个包装器(见下文)。现在包装器 ResettableCachedData 是单例的,而 CachedData 是 transient 的。任何时候都可以快速执行 Reset() 以重新创建 CachedData,同时通过 ResettableCachedData.Data 访问它的数据。

    public class ResettableCachedData
{
private readonly IServiceProvider _services;

public ResettableCachedData(IServiceProvider services)
{
_services = services;

Reset();
}

public CachedData Data { get; protected set; }

public void Reset()
{
Data = _services.GetRequiredService<CachedData>();
}
}

关于c# - ASP.NET Core 在运行时替换单例实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com