[英]Get type in referenced assembly by supplying class name as string?
這些是類似的問題: 操作方法:在運行時使用 Silverlight 中的字符串從引用程序集中加載類型,引用程序集中類上的 GetType 失敗,但兩個答案均無效。
我有一個 MVC 項目,它從一個數據庫中提取數據,其中包括作為字符串的普通類型。 這些類型在引用的程序集中,而不是在 MVC 項目中。
因此,例如,假設我的引用程序集名稱是MyFramework
和普通類型名稱Car
,完整類型名稱可以是MyFramework.Cars.Car
或MyFramework.Vehicles.Cars.Car
或其他一些變體。 我所擁有的只是引用的程序集名稱和普通類名稱作為字符串。 無論完整的類型名稱如何,我如何獲得類型?
最后,我能否在調用 GetType() 的引用程序集中編寫一個函數並在 MvC 項目中使用它,這樣我就可以放棄包含程序集名稱? 我想刪除知道的程序集名稱,所以我想我可以在引用的程序集中編寫一個 Util,例如:
namespace MyFramework //the referenced assembly
{
public static class TypeUtil
{
public static Type GetFrameworkType(string typeName)
{
return Type.GetType(typeName);
}
}
}
然后在我的 MVC 項目中我可以調用它而不需要程序集作為字符串名稱。 這是可能的還是我總是需要程序集名稱?
可能當時未加載引用的程序集。 另外,我從你的問題中了解到你沒有完整的類型名稱,只有類名。
你應該沿着這條線嘗試一些東西:
Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName");
希望我理解正確。
對於第一個問題,你可以做類似的事情
Type t = AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.FullName == "MyFramework")
.SelectMany(a => a.GetTypes())
.FirstOrDefault(t => t.Name == "Car");
我不確定你說的第二個問題是什么意思。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.