[英]Existing class/method for parsing fully qualified Type name
鑒於我有一個類型“Wibble.Wobble”存在於程序集“Foo.Bar”中
並且該程序集未加載到主應用程序加載上下文中
是否存在用於將以下字符串解析為其后續部分的現有公共機制:
"Wibble.Wobble, Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xyz"
問的原因是我需要在運行時加載各種類型,其中一些類型可能在當前的加載上下文中。 其他可能需要從外部組件加載。
我知道如何從當前的加載上下文Type.GetType("typename")
加載類型,我知道如何加載程序集並從中獲取類型Assembly.LoadFile("xyz").GetType("abc")
。 我遇到的問題是,如果您嘗試從程序Type.GetType
加載類型,則在使用Type.GetType
時, 它不應該是完全限定名稱 。
解決方案本身不應該那么復雜,它只是在第一個逗號之前拆分字符串。 但是我想知道是否有一種方法可以將完全限定名稱作為對象表示,因此我不必這樣做,這將有助於找到正確的程序集而無需遍歷整個目錄。
經過我的挖掘,我不相信框架中有任何公開可用的東西可以做到這一點。 我希望有人能夠向我展示不同的內容,因為我更喜歡使用核心功能,這些功能應該(或者應該)由比我更了解框架的人更好地測試和編寫。
因此我已經推出了自己的強類型TypeName
對象。
class TypeName
{
public TypeName(string name)
{
var index = name.LastIndexOf(',');
if (index > 0)
{
Name = name.Substring(0, index).Trim();
AssemblyName = new AssemblyName(name.Substring(index + 1).Trim());
}
else
{
Name = name;
}
}
public string Name { get; private set; }
public AssemblyName AssemblyName { get; private set; }
}
該對象接受一個string
,該string
應該是類型名稱或完全限定類型名稱。 如果它是完全限定的類型名稱,則使用AssemblyName類設置AssemblyName屬性,否則將其保留為null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.