Per memorizzare lo stato dei processi quando si è verificato un errore, desidero elencare tutti i dati (personalizzati) memorizzati in AppDomain (da SetData). La proprietà LocalStore è privata e la classe AppDomain non è ereditabile. Esiste un modo per enumerare tali dati?Elencare tutti i dati personalizzati memorizzati in AppDomain
8
A
risposta
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
Bella soluzione. Grazie per la risposta. –
2
Sulla base Frank59's risposta, ma un po 'più conciso:
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
Stessa soluzione, ma come un metodo di estensione # F. Potrebbe non essere necessario il controllo nullo. 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
Problemi correlati
- 1. Come vengono memorizzati i dati in lucene
- 2. PostgreSQL: come elencare tutti i tipi di dati disponibili?
- 3. Come elencare i tipi in archivio dati?
- 4. come visualizzare i dati personalizzati da tipi di post personalizzati
- 5. Come elencare tutti i tag Git?
- 6. Come posso elencare TUTTI i record DNS?
- 7. Dove sono memorizzati i dati di stringa?
- 8. I documenti SVG supportano attributi dati personalizzati?
- 9. Enumerare tutti gli AppDomain senza mscoree
- 10. Quanti dati possono essere memorizzati in MySQL?
- 11. Come elencare tutti i metodi per un oggetto in Ruby?
- 12. Come posso elencare tutti i moduli in un repository CVS?
- 13. In Perforce, elencare tutti i changeset per utente
- 14. SqlServer 08: query per elencare tutti i database in un'istanza?
- 15. Come elencare tutti i segnalibri in NERDTree di VIM?
- 16. Come elencare tutti i miei check-in usando ClearCase?
- 17. Come elencare tutti i file modificati in un volume shadow?
- 18. Come elencare tutti i tag in un determinato ramo Mercurial?
- 19. Come posso elencare tutti i vhosts in nginx
- 20. Come posso elencare tutti i pad in Etherpad-lite
- 21. Come elencare tutti i database MongoDB in Node.js?
- 22. Elencare tutti i valori di un determinato campo in mongodb
- 23. Come vengono memorizzati i dati in un file immagine
- 24. In Node.js, quando i dati sono memorizzati nell'heap?
- 25. Elencare i dati del sensore grezzo in Memo
- 26. Dati portachiavi non memorizzati in iCloud
- 27. Come elencare tutti i percorsi di caricamento automatico in Rails 3
- 28. Come cancellare tutti gli elementi memorizzati nella cache in Oracle
- 29. Dove vengono memorizzati i dati inviati da UDP?
- 30. Come elencare tutti i plugin jenkins non utilizzati?
perché non si limitano a memorizzare tutte le informazioni chiavi (precedentemente impostato con SetData) in qualche collezione e dopo interrogazione GetData fro ogni chiave in questa collezione? – Tigran
Stavo cercando una soluzione, in cui il processo non ha bisogno di utilizzare un'implementazione specifica. Dal momento che non penso sia possibile, il metodo di estensione per AppDomain che memorizza le chiavi è passato. Tks per la tua risposta. Se hai un altro indizio, non esitare. –