繁体   English   中英

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

[英]Re use data in a model in multiple view MVC 5

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

我只想知道是否有一个地方可以实例化该类,然后在多个控制器中重用它,因为目前我已经对其进行了设置,以便每个控制器都创建一个新的User实例,向其中添加相关数据,将其传递给它的视图,但这似乎并不有效!

您可以使用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())

或实现CacheRepository模式( CacheRepo模式描述

如果数据量很少,请考虑使用自定义IPrincipal (如果使用Identity则使用Claims ),因此可以在FormsAuthenticationTicket中使用它。 否则,您可以将数据存储在Session以避免重复的数据库调用。

另外,考虑一个BaseController类(您的所有控制器都从中继承),该类包含一个属性或方法以从Session中读取对象(并在Session过期或被回收的情况下从数据库中获取对象)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM