Aby zapisać stan procesów w przypadku wystąpienia błędu, chciałbym wyświetlić wszystkie (niestandardowe) dane przechowywane w AppDomain (przez SetData). Właściwość LocalStore jest prywatna, a klasa AppDomain nie jest dziedziczna. Czy istnieje sposób na wyliczenie tych danych?Lista wszystkich niestandardowych danych przechowywanych w AppDomain
8
A
Odpowiedz
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
Ładne rozwiązanie. Dzięki za odpowiedź. –
2
podstawie Frank59's odpowiedzi, ale nieco bardziej zwięzła:
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
samo rozwiązanie, ale jako metodę rozszerzenia F #. Może nie wymagać sprawdzania zerowego. 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
Powiązane problemy
- 1. Lista wszystkich procedur przechowywanych o nazwie schematu
- 2. Lista wszystkich tabel w bazie danych
- 3. Lista wszystkich tabel w bazie danych
- 4. Lista rozwijana Django formularza przechowywanych modeli
- 5. Psql lista wszystkich tabel
- 6. Lista SQL wszystkich zdefiniowanych przez użytkownika funkcji w bazie danych
- 7. Lista wszystkich folderów w katalogu
- 8. Uzyskiwanie listy wszystkich dostępnych obszarów nazw w AppDomain
- 9. AppleScript - Lista wszystkich czcionek
- 10. Lista wszystkich diagnostyków gcc
- 11. Lista wszystkich krajów rozwijanej
- 12. Jak mogę uzyskać listę wszystkich funkcji przechowywanych w bazie danych określonego schematu w PostgreSQL?
- 13. Lista wszystkich liczników wydajności dla kategorii
- 14. Lista wszystkich typów sqibase sql
- 15. Pobieranie listy wszystkich kluczy przechowywanych w Redis (Ruby)
- 16. SecurityException w Sandboxed AppDomain
- 17. ASP.NET MVC4 Lista wszystkich obszarów
- 18. Lista wszystkich rekursywnie svn: externals?
- 19. lista wszystkich poziomach Czynnikiem data.frame
- 20. AppleScript - lista wszystkich uruchomionych aplikacji
- 21. Lista wszystkich możliwych wyjątków SoapServer
- 22. Lista wszystkich klas BEZ Javadocs
- 23. Lista wszystkich folderów i podfolderów
- 24. Główna lista wszystkich wydarzeń Tkinter?
- 25. Lista wszystkich informacji o sesji
- 26. Lista wszystkich nieskończonych buildów w Jenkins?
- 27. Lista wszystkich zdjęć z aparatu w Androidzie
- 28. Lista wszystkich pól w indeksie elasticsearch?
- 29. Lista wszystkich dostępnych działań w google home
- 30. Lista wszystkich zasobów osadzonych w folderze
dlaczego nie tylko przechowywać wszystkie klucze informacji (poprzednio ustawioną setData) W niektórych kolekcji i po zapytaniu GetData powrotem każdym kluczem w tej kolekcji? – Tigran
Szukałem rozwiązania, w którym proces nie wymaga użycia konkretnej implementacji. Ponieważ nie wydaje mi się to możliwe, metoda rozszerzenia dla AppDomain, która przechowuje klucze przekazane. Tks za odpowiedź. Jeśli masz inną wskazówkę, nie zwlekaj. –