Ottieni il tipo nell’assembly referenziato fornendo il nome della class come stringa?

Domande simili: Procedura: caricare un tipo da un assembly di riferimento in fase di esecuzione utilizzando una stringa in Silverlight , GetType su una class in un assembly di riferimento non riesce ma nessuna delle due funzioni funziona.

Ho un progetto MVC che estrae i dati da un database che include i tipi semplici come stringhe. Questi tipi sono in un assembly referenziato, non nel progetto MVC.

Ad esempio, supponiamo che il nome dell’assembly di riferimento sia MyFramework e il nome di tipo semplice Car , il nome completo del tipo potrebbe essere MyFramework.Cars.Car o MyFramework.Vehicles.Cars.Car o qualche altra variante. Tutto quello che ho sono il nome dell’assembly di riferimento e il nome della class semplice come stringhe. Come posso ottenere il tipo indipendentemente dal nome completo del tipo?

Infine, potrei scrivere una funzione nell’assembly referenziato che chiama GetType () e usarlo nel progetto MvC in modo da poter rinunciare a includere il nome dell’assembly? Voglio rimuovere conoscendo il nome dell’assembly così ho pensato di poter scrivere un UTIL nell’assembly referenziato come:

 namespace MyFramework //the referenced assembly { public static class TypeUtil { public static Type GetFrameworkType(string typeName) { return Type.GetType(typeName); } } } 

E poi nel mio progetto MVC potrei chiamarlo senza bisogno dell’assembly come nome di stringa. È ansible o avrò sempre bisogno del nome dell’assembly?

Forse l’assembly di riferimento non è caricato in quel momento. Inoltre, capisco dalla tua domanda che non hai il nome completo del tipo, solo il nome della class.
Dovresti provare qualcosa seguendo questa linea quindi:

 Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName"); 

Spero di averti capito bene.

Per la prima domanda, potresti fare qualcosa di simile

 Type t = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.FullName == "MyFramework") .SelectMany(a => a.GetTypes()) .Where(t => t.Name == "Car") .FirstOrDefault(); 

Non sono sicuro di cosa intendi con la seconda domanda.