爲了在發生錯誤時存儲進程的狀態,我想列出存儲在AppDomain中的所有(自定義)數據(通過SetData)。 LocalStore屬性是私有的,AppDomain類不可繼承。 有什麼辦法來枚舉這些數據?列出存儲在AppDomain中的所有自定義數據
8
A
回答
5
AppDomain domain = AppDomain.CurrentDomain;
domain.SetData("testKey", "testValue");
FieldInfo[] fieldInfoArr = domain.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo fieldInfo in fieldInfoArr)
{
if (string.Compare(fieldInfo.Name, "_LocalStore", true) != 0)
continue;
Object value = fieldInfo.GetValue(domain);
if (!(value is Dictionary<string,object[]>))
return;
Dictionary<string, object[]> localStore = (Dictionary<string, object[]>)value;
foreach (var item in localStore)
{
Object[] values = (Object[])item.Value;
foreach (var val in values)
{
if (val == null)
continue;
Console.WriteLine(item.Key + " " + val.ToString());
}
}
}
+0
不錯的解決方案。感謝您的回覆。 –
2
基於Frank59's答案,但有點更簡潔:
var appDomain = AppDomain.CurrentDomain;
var flags = BindingFlags.NonPublic | BindingFlags.Instance;
var fieldInfo = appDomain.GetType().GetField("_LocalStore", flags);
if (fieldInfo == null)
return;
var localStore = fieldInfo.GetValue(appDomain) as Dictionary<string, object[]>;
if (localStore == null)
return;
foreach (var key in localStore.Keys)
{
var nonNullValues = localStore[key].Where(v => v != null);
Console.WriteLine(key + ": " + string.Join(", ", nonNullValues));
}
1
相同的溶液,但作爲一個F#擴展方法。可能不需要空檢查。 https://gist.github.com/ctaggart/30555d3faf94b4d0ff98
type AppDomain with
member x.LocalStore
with get() =
let f = x.GetType().GetField("_LocalStore", BindingFlags.NonPublic ||| BindingFlags.Instance)
if f = null then Dictionary<string, obj[]>()
else f.GetValue x :?> Dictionary<string, obj[]>
let printAppDomainObjectCache() =
for KeyValue(k,v) in AppDomain.CurrentDomain.LocalStore do
printfn "%s" k
相關問題
- 1. 列出了來自Pysphere的特定esx主機中的所有數據存儲
- 2. 在Wordpress中列出自定義數據
- 3. 在數據庫中存儲用戶自定義列表
- 4. 在DataGridView列中存儲自定義類
- 5. JavaScript - 將所有從循環存儲中存儲的數據定義爲undefined
- 6. 自定義NiFi處理器所需的存儲數據
- 7. GAE數據存儲:如何存儲自定義對象的數組列表
- 8. GKPlayer - 存儲自定義數據
- 9. 用Facebook存儲自定義數據
- 10. Thread.CurrentThread存儲自定義數據,如userid
- 11. 在Google數據存儲中列出除保留的數據存儲之外的所有類型(java)
- 12. 在使用Facebook API時定義和存儲自定義數據
- 13. 列出所有來源的html5本地存儲數據
- 14. 列出數據庫中所有用戶的自定義軟件包?
- 15. 將每個用戶的自定義數據存儲在ejabberd中
- 16. 在Spring數據中自定義實現中間存儲庫
- 17. 列出Git存儲庫中存在的所有文件
- 18. 根據存儲在列表中的過程定義函數
- 19. SVN:列出存儲庫中所有項目的所有分支
- 20. 輸出來自熊貓數據框中所有列的數據
- 21. 彈簧數據JPA - 向所有存儲庫添加自定義行爲
- 22. 自定義數組自定義數組的持久性存儲
- 23. 在Android中存儲靜態數據 - 自定義資源?
- 24. 將圖像存儲在自定義數據屬性中
- 25. 在Sqlite3數據庫中存儲自定義類對象失敗
- 26. 在Alexa設備中存儲自定義數據
- 27. 如何通過nsuserdefaults在swift中存儲自定義數據?
- 28. 在UserDefaults中存儲自定義數據是否好方法?
- 29. 如何在數據庫中存儲自定義用戶字段
- 30. 將自定義數據存儲在Identity Cookie中
爲什麼不只是存儲在一些收集和查詢的GetData來回後,該集合在每一個關鍵的所有鍵的信息(先前的SetData設置)? – Tigran
我正在尋找一個解決方案,其中的過程不需要使用特定的實現。由於我不認爲這是可能的,因此存儲密鑰的AppDomain的擴展方法已通過。 Tks爲您的答覆。如果你有另一個線索,請不要猶豫。 –