2017-08-08 92 views
0

我正在嘗試找到使用會話變量的替代方法。在我的解決方案中,我有一個ASP.NET Web應用程序和控制檯應用程序引用的項目。這兩個應用程序都可以對數據進行更改,並且在做出更改時,將根據該行記錄進行更改的用戶的ID。替代會話變量

因此,如果它只是ASP.NET應用程序進行更改,它可以做類似myObj.LastUpdatedByID = Session["userid"]。鑑於命令行應用程序需要進行更改並且沒有會話,我可以使用哪種替代方法,它具有ASP.NET中的會話作用域,但也可以在控制檯應用程序作用域中使用?

我曾看過MemoryCache,但似乎是ASP.NET中的應用程序級別。

我不想在傳遞用戶標識到每個調用的過程中下線。

會做類似於檢查一個HttpContext,如果有,從會話拉,如果沒有,從MemoryCahce拉?還是有更好的方法呢?

編輯: 用戶ID在控制檯應用程序中具體設置取決於正在執行的操作。控制檯應用程序用於自動化流程,並執行許多操作。因此,例如,發送電子郵件過程將由用戶標識1執行,刪除舊文件過程將由用戶標識2執行。在某些實例中,用戶標識將設置爲上次創建的用戶標識該行數據的變化。

編輯: 一些示例代碼(爲簡潔起見剝離)。你可以看到我使用這裏的MemoryCache,這我理解是應用廣泛,因此無法使用在ASP.NET應用程序:

public class Base(
{ 
    private int auditID = -1; 
    public int AuditID 
    { 
     get 
     { 
      if (this.auditID <= 0) 
      { 
       ObjectCache memCache = MemoryCache.Default; 
       this.auditID = ((int)memCache["CurrentUserID"]); 
      } 
      return this.auditID; 
     } 
    } 
} 

public class MyObject : Base 
{ 
    public int LastUpdatedByID { get; set; } = 0; 

    public bool Save() 
    { 
     bool b = false; 
     this.LastUpdatedByID = this.AuditID; 
     //Call to DB here... 
     return b; 
    } 
} 
+0

是怎樣一個用戶在控制檯應用程序認證? – CodeCaster

+0

@CodeCaster我已添加編輯 – TechyGypo

+0

顯示更新對象的代碼。一個類庫不應該引用System.Web。 – CodeCaster

回答

0

如果數據需要在應用程序持久的,那麼你不能使用SessionHttpContext.Cache,因爲這些依賴於當前在控制檯應用程序中沒有的HttpContext

另一種方法,是將數據存儲在數據庫一樣某些持久性數據存儲或分佈式緩存像Redis Cache/Azure Mem Cache

+0

如果我困惑。我不需要在控制檯應用程序和ASP.NET應用程序之間共享ID。我需要他們都參考瞭解該ID的項目。控制檯應用程序使用_core_。 ASP.NET使用_core_。 _core_需要知道用戶ID。 ref'd項目是一堆編譯成DLL的類。 – TechyGypo