簡體   English   中英

用於解析完全限定類型名稱的現有類/方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM