Mi sto strappando i capelli cercando di risolvere questo problema. Quello che sto cercando di fare è costruire una "mappa" di come gli oggetti vengono usati in un po 'di codice su cui sto lavorando. Pensalo come un miglior uso di Trova. Il modo più semplice per mostrare questo è l'esempio:Riflessione .NET: Trova i tipi usati
public class MasterClass
{
Type1 type1;
Type2 type2;
Type3 type3;
void InitializeData()
{
type1 = new Type1(this);
type2 = new Type2(this);
type3 = new Type3(this);
}
}
public class Type1
{
private MasterClass _master;
public Type1(MasterClass master)
{
_master = master;
}
public void Something()
{
//use _master.type2 and _master.type3 here
}
}
public class Type2
{
private MasterClass _master;
public Type2(MasterClass master)
{
_master = master;
}
public void Something()
{
//use _master.type3 here
}
}
public class Type3
{
private MasterClass _master;
public Type3(MasterClass master)
{
_master = master;
}
public void Something()
{
//use _master.type1 and _master.type2 here
}
}
Quello che sto cercando di fare è ottenere una mappatura o di relazione che, nel caso della esempio, darebbe qualcosa di simile:
Type1 usato da: { Type3}
Tipo2 usato da: {Type1, Type3}
Type3 usato da: {Type1, Type2}
Se posso farlo in un dizionario, allora sono a casa. :-)
Quello che ho provato:
ho cercato di andare oltre le assemblee, ogni tipo, ogni metodo quindi tirando le matrici IL e poi cercando di analizzare i operandi senza fortuna. Ho persino provato a esaminare i file sorgente con alcune espressioni regolari, ma ho migliaia di classi da esaminare, scritte in diversi stili diversi, il che significa che mi mancheranno alcuni riferimenti.
Posso usare Riflettore & &/|| Resharper per ottenere un singolo riferimento alla volta, ma mi piacerebbe averli tutti in una volta.
Qualche suggerimento?
Sarebbe un riflettore aggiuntivo che fa il lavoro, essere sufficiente? – driis
Vuoi realizzare questo in modo programmatico o semplicemente usando uno strumento? – Ucodia
C# è un linguaggio di programmazione. Non ha riflessione. Questo è .NET. –