代码之家  ›  专栏  ›  技术社区  ›  Ryan

在运行时替换单个实例的asp.net内核

  •  1
  • Ryan  · 技术社区  · 6 年前

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

    我尝试了下面的操作,但它似乎只替换了当前的请求,之后什么也没有。我假设di容器创建了它自己的对象副本,但我不确定

    internal static SingleObject SingleObject { get; set; } = new SingleObject();
    
    services.AddSingleton<OrderBook>(SingleObject)
    

    有没有办法替换单例实例,或者我必须滚动自己的单例类来处理这个场景?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Reuel Ribeiro    6 年前

    https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2 :

    独生子女

    单例生存期服务是在第一次被请求时(或在 ConfigureServices 运行并使用服务注册指定实例)。每个后续请求都使用相同的实例。如果应用程序需要单例行为,建议允许服务容器管理服务的生存期。不要实现单例设计模式,并提供用户代码来管理类中对象的生存期。

    所以,你不需要实现 Singleton 塑造你自己。这个 DI 处理好了。

    你现在唯一应该做的就是注射。

    注册如下:

    services.AddSingleton<SingleObject>(new SingleObject())