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

Rya*_*yan 10 c# asp.net .net-core asp.net-core

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

我尝试了以下操作,但似乎它只替换了当前的请求,之后就没有任何内容了。我假设 DI 容器制作了它自己的对象副本,但我不确定

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

services.AddSingleton<OrderBook>(SingleObject)
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*sky 4

我有一个单身人士,CachedData直到意识到需要在某个时刻快速重置它。所以只是实现了一个包装器(见下文)。现在包装器ResettableCachedData是单例的,并且CachedData是瞬态的。任何时候都可以快速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>();
        }
    }
Run Code Online (Sandbox Code Playgroud)