在 asp.net 核心的嵌套函数中使用 MemoryCache

Posted

技术标签:

【中文标题】在 asp.net 核心的嵌套函数中使用 MemoryCache【英文标题】:use MemoryCache in nested functions in asp.net core 【发布时间】:2021-12-01 10:14:19 【问题描述】:

我需要在许多可以非常嵌套的函数中使用 MemoryCache(或 IWebHostEnvironment )。

我是否必须将注入剃须刀页面或控制器的参数发送到这些函数中的每一个,才能在所有这些嵌套函数中使用 MemoryCache?

有没有更好的解决方案?例如像 HttpAccessor

【问题讨论】:

请注意,如果您的应用程序横向扩展,您可能需要重构为分布式缓存模型。 是的,我知道,我以后需要使用像 Redis 这样的分布式缓存,但我的问题不仅仅是 MemoryCache,而是在很多嵌套函数中使用注入参数 这并没有使它更清楚。向我们展示代码。 【参考方案1】:

在我看来,这取决于你如何开发你的功能。如果您将此函数的类注册为 startup.cs 中的服务。无需将内存缓存传递给该函数。

您可以直接使用 DI 获取内存缓存模型。如果不将函数注册为服务,则需要在控制器中使用时获取内存缓存并传递。

更多asp.net core中内存缓存的使用方法,可以参考article。

【讨论】:

我的主要问题是将注入的服务发送到数百个嵌套函数。我在所有剃须刀页面中注入 MemoryCache 或 IWebHostEnvironment 没有问题,因为页面数量有限,当我将新类注册为服务时,它仍然需要在所有页面的构造函数中注入,但如果我想使用这些服务很多功能,我应该将这些服务作为参数传递给所有功能 是的,这个内存缓存是默认注入的,如果你想在函数方法中使用它,那么你可以得到它。我不明白你的意思是我应该将这些服务作为参数传递给所有函数。 假设我在 Product 类中有一个 ToJsonCustom() 方法,在这个方法中我使用 this.GetFullName() ,当我想读取全名时我应该访问 MemoryCache 以读取当前语言,我怎么能在 GetFullName() 方法中访问内存缓存?首先我应该将内存缓存注入到 page 中,并将其传递给 ToJsonCustom 并将其传递给 GetFullName 。我可以直接在 GetFullName 中访问 MemoryCache 而不向这些方法传递参数吗?

以上是关于在 asp.net 核心的嵌套函数中使用 MemoryCache的主要内容,如果未能解决你的问题,请参考以下文章

在asp.net核心的嵌套iframe中动态设置高度

如何使用 JQuery c# 在嵌套网格视图 ASP.net 中使用日期时间选择器

如何在 asp.net mvc 核心中链接 css?

如何使用构造函数依赖注入对 asp.net 核心应用程序进行单元测试

如何在 asp.net 核心中正确格式化堆栈跟踪信息

ASP.NET MVC中能否嵌套WEB控件页面使用?