簡體   English   中英

通過將類名作為字符串提供來獲取引用程序集中的類型?

[英]Get type in referenced assembly by supplying class name as string?

這些是類似的問題: 操作方法:在運行時使用 Silverlight 中的字符串從引用程序集中加載類型,引用程序集中類上的 GetType 失敗,但兩個答案均無效。

我有一個 MVC 項目,它從一個數據庫中提取數據,其中包括作為字符串的普通類型。 這些類型在引用的程序集中,而不是在 MVC 項目中。

因此,例如,假設我的引用程序集名稱是MyFramework和普通類型名稱Car ,完整類型名稱可以是MyFramework.Cars.CarMyFramework.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.

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