假設我有一個工廠方法,它想要構建在運行時通過反射選擇的類型的實例。進一步假設我的工廠方法是通用代碼,它不直接引用包含指定類型的程序集,儘管它將從具有必要程序集引用的應用程序中運行。如何通過反射從引用的程序集中獲取類型
我該如何着手編寫可以找到這種類型的代碼?如果我做了以下
public object CreateInstance(string typeName)
{
Type desiredType = Assembly.GetExecutingAssembly().GetType(typename);
// Instantiate the type...
}
這似乎失敗,因爲該類型未在執行的程序集定義。如果我可以在運行時獲得所有可用的程序集,我可以遍歷它們並找出哪一個包含我想要的類型。但我看不出有辦法做到這一點。 AppDomain.CurrentDomain.GetAssemblies()
看起來很有前途,但不會返回我在項目中引用的所有程序集。
編輯:有幾個人指出我需要加載程序集。麻煩的是,這段代碼不知道應該加載哪個程序集,因爲我試圖以不依賴於其他程序集的方式編寫代碼。
我故意省略typeName
的細節,因爲從字符串到類型的映射實際上在我的真實代碼中更加複雜。實際上,類型是由包含指定字符串的自定義屬性標識的,但是如果我可以獲取類型列表,那麼將列表限制爲所需類型時不存在問題。
typeName中的值是什麼?這是完全合格的名字嗎? – 2010-02-18 18:50:02