我需要保留从Db获得的几个值,并且在会话期间将保持不变,尽管由于用户发送特定请求而可能会改变它们。我们曾经使用Session变量来做到这一点。
我想注册一个Singleton服务,该服务将从Db获取一些值并在整个会话期间保留它们。因此,该服务需要我的DbContext。
界面很简单:
interface IPhrases
{
Task SetPhrasesForLanguage(int LanguageID);
}
服务类与此类似:
public class LangPhrases : IPhrases
{
private OVContext _context;
private int _LanguageID;
public string PageHeading { get; set; }
public LangPhrases(OVContext context, int LanguageID)
{
_context = context;
_LanguageID = LanguageID;
}
public Task SetPhrasesForLanguage(int LanguageID)
{
IQueryable<clsPhrases> lPhrases = (from p in _context.Phrases
where p.LangaugeId == LanguageID
select new clsPhrases()
{
Phrase=p.Phrase,
VarID=p.VarId
});
//logic to get PageHeading from the lPhrases collection
}
}
将范围化的DbContext传递给单例服务是否会将DbContext保留在请求之间的内存中?
要澄清一下:我正在寻找一种获取这些值并将其保存在会话中的方法,而无需将DbContext保留在内存中。
答案 0 :(得分:1)
您应该使用请求范围服务和IMemoryCache来缓存值。如果您在缓存中找不到这些值,请从DbContext读取它们,该值也应该是Request-Scoped。