Asp.net core 如何以及在何处使用/设置asp.net核心webapi中的集合?

Asp.net core 如何以及在何处使用/设置asp.net核心webapi中的集合?,asp.net-core,asp.net-core-webapi,Asp.net Core,Asp.net Core Webapi,我需要记录每个客户的一些临时数据。我不希望使用数据库,因为我认为收集很快,而且这些数据不需要保存很长时间 我应该把收藏放在哪里?我不知道,在asp.net核心服务器中,如何使一个集合类的生命周期与主机一样长,并且可以被不同的控制器访问?您可以使用 配置服务: services.AddControllers(); private IMemoryCache memoryCache; public YourController( IMemoryCache memoryCache) { thi

我需要记录每个客户的一些临时数据。我不希望使用数据库,因为我认为收集很快,而且这些数据不需要保存很长时间

我应该把收藏放在哪里?我不知道,在asp.net核心服务器中,如何使一个集合类的生命周期与主机一样长,并且可以被不同的控制器访问?

您可以使用

配置服务

services.AddControllers();
private IMemoryCache memoryCache;
public YourController(
  IMemoryCache memoryCache)
{
  this.memoryCache = memoryCache;
}
protected static string CacheKey = "UniqueCacheKey";

public static List<YourObject> GetCachedYourList(IMemoryCache cache)
{
    if (cache.TryGetValue(CacheKey, out List<YourObject> cachedList))
    {
        return cachedList;
    }

    // otherwise populate your value from database
    // var yourCachedList = ...
    cache.Set(CacheKey, yourCachedList, TimeSpan.FromDays(14));
    return yourCachedList;
}
控制器

services.AddControllers();
private IMemoryCache memoryCache;
public YourController(
  IMemoryCache memoryCache)
{
  this.memoryCache = memoryCache;
}
protected static string CacheKey = "UniqueCacheKey";

public static List<YourObject> GetCachedYourList(IMemoryCache cache)
{
    if (cache.TryGetValue(CacheKey, out List<YourObject> cachedList))
    {
        return cachedList;
    }

    // otherwise populate your value from database
    // var yourCachedList = ...
    cache.Set(CacheKey, yourCachedList, TimeSpan.FromDays(14));
    return yourCachedList;
}
访问

services.AddControllers();
private IMemoryCache memoryCache;
public YourController(
  IMemoryCache memoryCache)
{
  this.memoryCache = memoryCache;
}
protected static string CacheKey = "UniqueCacheKey";

public static List<YourObject> GetCachedYourList(IMemoryCache cache)
{
    if (cache.TryGetValue(CacheKey, out List<YourObject> cachedList))
    {
        return cachedList;
    }

    // otherwise populate your value from database
    // var yourCachedList = ...
    cache.Set(CacheKey, yourCachedList, TimeSpan.FromDays(14));
    return yourCachedList;
}
受保护的静态字符串CacheKey=“UniqueCacheKey”;
公共静态列表GetCachedYourList(IMemoryCache缓存)
{
if(cache.TryGetValue(CacheKey,out List cachedList))
{
返回缓存列表;
}
//否则,从数据库填充您的值
//var yourCachedList=。。。
Set(CacheKey,你的cachedlist,TimeSpan.FromDays(14));
返回您的缓存列表;
}

有关更多详细信息,请查看:

谢谢您的回复。asp.net core是否允许设置一个并发字典并在不同的控制器之间共享?在wpf/uwp中,我可以在app类中设置一个集合,它几乎可以在整个应用程序中共享。如果我想这样做,我应该在asp.net core Server中做什么?是的,通过在每个控制器中使用
IMemoryCache
的依赖项注入,您可以从多个控制器访问相同的缓存。谢谢您的帮助。我可以这样理解吗,在asp.net内核中,使用DI在不同端点之间共享对象,以取代全局变量的方式作为更好的选择?DI可以用于在控制器之间甚至同一对象之间共享对象。请查看以供进一步参考。看看
Singleton