Caching 使用dotnet core中的内存集合-如何使所有类都可用

Caching 使用dotnet core中的内存集合-如何使所有类都可用,caching,.net-core,singleton,in-memory-database,in-memory,Caching,.net Core,Singleton,In Memory Database,In Memory,在dotnetcore项目中,如何在任何给定的时间将内存中的集合提供给任何类? 我在考虑以下方法: public interface IInMemoryCache { public void Setup(); } public class InMemoryCache : IInMemoryCache { private List<MyObject> cache; public void Setup() // entered once when app is

在dotnetcore项目中,如何在任何给定的时间将内存中的集合提供给任何类? 我在考虑以下方法:

public interface IInMemoryCache
{
    public void Setup();
}

public class InMemoryCache : IInMemoryCache
{
    private List<MyObject> cache;
    public void Setup() // entered once when app is started 
    {
        cache = new List<MyObject>() { 
                new MyObject("param1", "param2"), 
                new MyObject("param3", "param4") 
    } 
    public IList<MyObject> GetCollection() 
    {
        return this.collection;
    }
}

而且:

public void ConfigureServices(IServiceCollection services) { 
    services.AddSingleton<IInMemoryCache, InMemoryCache>();
public void配置服务(IServiceCollection服务){
services.AddSingleton();
这是一种好方法吗?这是否意味着我可以在任何类中注入IINMeryCache并能够访问缓存对象?-在应用程序的整个生命周期内(这意味着,当它启动并运行时,如果我重新启动它,集合将再次从运行Setup方法初始化)

所以现在在我刚刚添加的任何类中:
IInMemoryCache缓存
然后
cache.GetCollection()
检索集合(在应用程序启动时设置过一次)


是否有一种更好的方式来像一个本地的特征缓存一个集合,可用于所有的类?

我会说这是一个很好的方法。但是,当你使用一个<代码>列表>代码>你应该考虑线程安全性。然后在处理线程安全的
IMemoryCache
中使用Add/Remove方法。否则我会说这很好。另外,您可以看看
IStartupFilter
。这是一种将自定义启动行为添加到应用程序中的好方法,可以删除startup.cs中对
iimerycache
的依赖性-
public void ConfigureServices(IServiceCollection services) { 
    services.AddSingleton<IInMemoryCache, InMemoryCache>();