在多视图MVC 5中重用模型中的数据
本文关键字:模型 数据 视图 MVC | 更新日期: 2023-09-27 18:16:58
我有一个c# web应用程序的用户模型,我在控制器中填充了各种属性,如用户名等。
我只是想知道,如果有一个地方,我可以实例化这个类一次,然后在多个控制器中重用它,因为目前我有它的设置,以便每个单独的控制器创建一个新的用户实例,将相关数据添加到它,并将其传递给它的视图,但这似乎并不有效!
如果它的数据量很小,考虑使用自定义的IPrincipal
(或Claims
,如果你使用Identity
),所以它在FormsAuthenticationTicket中可用。否则,您可以将数据存储在Session
中,以避免重复调用数据库。
此外,考虑一个BaseController
类(所有控制器都继承它),它包含一个属性或方法来从会话中读取对象(并在Session
过期或已回收的情况下从数据库中获取对象)
你可以使用MemoryCache
:
public class InMemoryCache: ICacheService
{
public T GetOrSet<T>(string cacheKey, Func<T> getItemCallback) where T : class
{
T item = MemoryCache.Default.Get(cacheKey) as T;
if (item == null)
{
item = getItemCallback();
MemoryCache.Default.Add(cacheKey, item, DateTime.Now.AddMinutes(10));
}
return item;
}
}
interface ICacheService
{
T GetOrSet<T>(string cacheKey, Func<T> getItemCallback) where T : class;
}
用法:var user=cacheService.GetOrSet("User", ()=>Repository.GetUser())
或者实现cacherpository pattern (CacheRepo pattern description)