在多视图MVC 5中重用模型中的数据

本文关键字:模型 数据 视图 MVC | 更新日期: 2023-09-27 18:16:58

我有一个c# web应用程序的用户模型,我在控制器中填充了各种属性,如用户名等。

我只是想知道,如果有一个地方,我可以实例化这个类一次,然后在多个控制器中重用它,因为目前我有它的设置,以便每个单独的控制器创建一个新的用户实例,将相关数据添加到它,并将其传递给它的视图,但这似乎并不有效!

在多视图MVC 5中重用模型中的数据

如果它的数据量很小,考虑使用自定义的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)