/// <summary>
/// 依賴注入系統中類的生命周期。
/// </summary>
public enum DependencyLifeStyle
{
/// <summary>
/// 單例模式。
/// 第一次解析是創建一個實例,后續解析都使用第一次創建的實例。
/// </summary>
Singleton,
/// <summary>
/// 范圍內唯一模式。
/// 同一請求周期內,第一次解析是創建一個實例,后續解析都使用第一次創建的實例。
/// 不同線程 實例不同。
/// </summary>
Scoped,
/// <summary>
/// 瞬態對象。每次解析都創建一個對象。
/// </summary>
Transient
}
完成EF上下文對象的創建,保證在一次請求內只創建一次。保證線程內唯一。
(在asp.net中,EF上下文容器。如果只要有一個,則每次一個用戶訪問,添加一些實體,然后又不會自動銷毀,就會造成內存爆炸。
如果每次創建一個,則就出現一個實例調用混亂。在asp.net中,保證一個線程(一次http請求及一個管道事件),一個EF上下文容器就剛剛好,解決上面問題。)
[MethodImpl(MethodImplOptions.Synchronized)]
public static XFKDB.XFKDB GetDBContext()
{
var dbContext = CallContext.GetData("dbContext") as XFKDB.XFKDB;//線程內唯一的。
if (dbContext == null)
{
dbContext = new XFKDB.XFKDB();
CallContext.SetData("dbContext", dbContext);
}
return dbContext;
}
另一種方式:
[MethodImpl(MethodImplOptions.Synchronized)]
public static XFKDB.XFKDB GetDBContext()
{
var dbContext = NLite.Threading.Local.Get(DbKey) as XFKDB.XFKDB;
if (dbContext == null || dbContext.IsDisposed)
{
dbContext = new XFKDB.XFKDB("constring");
NLite.Threading.Local.Set(DbKey, dbContext);
}
return dbContext;
}