Để lưu trữ trạng thái của các quá trình khi xảy ra lỗi, tôi muốn liệt kê tất cả dữ liệu (tùy chỉnh) được lưu trữ trong AppDomain (theo SetData). Thuộc tính LocalStore là riêng tư và lớp AppDomain không thể kế thừa. Có cách nào để liệt kê các dữ liệu đó không?Liệt kê tất cả dữ liệu tùy chỉnh được lưu trữ trong AppDomain
8
A
Trả lời
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
Giải pháp tốt. Cảm ơn bạn đã trả lời. –
2
Dựa trên Frank59's câu trả lời nhưng một chút ngắn gọn hơn:
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
Cùng một giải pháp, nhưng như một phương pháp # mở rộng F. Có thể không cần kiểm tra null. 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
Các vấn đề liên quan
- 1. Liệt kê tất cả các chỉ mục
- 2. Liệt kê tất cả các kho SVN
- 3. Liệt kê tất cả virtualenv
- 4. Psql liệt kê tất cả các bảng
- 5. Liệt kê thông tin về tất cả các tệp cơ sở dữ liệu trong SQL Server
- 6. Có thể liệt kê tất cả các khoá ngoại trong cơ sở dữ liệu không?
- 7. Liệt kê tất cả các bảng trong cơ sở dữ liệu
- 8. Làm thế nào để liệt kê tất cả các cơ sở dữ liệu MongoDB trong Node.js?
- 9. làm thế nào để có được tất cả dữ liệu đó được lưu trữ trong jquery.data()
- 10. Làm cách nào để liệt kê tất cả các cụm được nạp?
- 11. Liệt kê tất cả người dùng trong LDAP bằng PHP
- 12. Liệt kê tất cả các hội đồng .NET có sẵn
- 13. Làm cách nào để liệt kê tất cả các quy trình không được lưu trữ trên hệ thống?
- 14. Tôi cần sử dụng SQL nào để liệt kê tất cả các thủ tục được lưu trữ trên cơ sở dữ liệu Oracle?
- 15. Cách liệt kê tất cả các ngày giữa hai ngày
- 16. Liệt kê tất cả các hàm dựng sẵn trong javascript?
- 17. PostgreSQL: Làm thế nào để liệt kê tất cả các kiểu dữ liệu có sẵn?
- 18. Có thể lưu trữ giá trị null của thuộc tính được liệt kê vào cơ sở dữ liệu không?
- 19. Liệt kê tất cả các xử lý tệp đang mở?
- 20. Liệt kê tất cả các bảng hiện đang được xuất bản để sao chép MS-SQL
- 21. Liệt kê tất cả các thư mục trong thư mục
- 22. Liệt kê tất cả các tệp trong gói homebrew
- 23. Liệt kê tất cả các bảng trong postgresql information_schema
- 24. Liệt kê tất cả các trang web trong IIS C#
- 25. liệt kê tất cả các quy trình trong iOS 5.0.1
- 26. Liệt kê tất cả cột ngoại trừ một trong R
- 27. cách đặt lại tất cả lưu trữ dữ liệu được lưu trữ bằng cách sử dụng các tùy chọn được chia sẻ
- 28. Xóa tất cả dữ liệu được lưu trữ với CoreData khi mô hình đã thay đổi
- 29. Lưu trữ dữ liệu tùy chỉnh trong các phần tử dom
- 30. git: Chỉ liệt kê các tệp được sửa đổi cho tất cả các dấu gạch ngang
tại sao không chỉ lưu trữ tất cả thông tin phím (trước đây thiết lập với SetData) trong một số bộ sưu tập và sau khi truy vấn GetData fro mỗi chủ chốt trong bộ sưu tập đó? – Tigran
Tôi đang tìm kiếm một giải pháp, trong đó quy trình không cần sử dụng triển khai cụ thể. Vì tôi không nghĩ rằng nó có thể, phương pháp mở rộng cho AppDomain đó là lưu trữ các phím thông qua. Tks cho trả lời của bạn. Nếu bạn có một đầu mối khác, đừng ngần ngại. –