的引用我有一個dll的完整路徑,但不是引用,我需要實例化一個實現了我定義的接口的對象。 我確實擁有對其他dll的控制權,所以我可以像dll那樣執行一些靜態函數來返回我需要的對象。我不知道如何調用這個函數,或者即使我正在接近這個權利。創建一個在dll中定義的對象,我沒有
2
A
回答
2
您需要手動加載該程序集,然後使用反射來找到並執行你感興趣的方法Here's an article.
有趣的來電/該條聲明:
調用
Assembly.Load()
讓運行時將程序集加載到AppDomain中(使其成員可調用)。在搜索包含在組件中的
Type
小號建築
MethodInfo
和ConstructorInfo
對象,這是用於調用一個方法或實例化一個實例的反射成分,分別在
MethodInfo
調用.Invoke()
或ConstructorInfo
。Invoke()
實質上是在告訴Reflection來執行相應的方法。
0
您可以在運行時加載組件,並使用System.Activator或reflection來實例化該組件中的類型。如果你正在尋找一個實例的類型沒有默認的構造函數,那麼你必須傳遞正確的參數。這可能是棘手的問題,但如果類型很容易構建(使用相同的方法),這也很簡單。 如果您正在調用構造此類型的方法,那麼它將在成功時返回對象。 我懷疑你指的接口不是嚴格的.Net接口,而是一組訪問類型的公共方法。你也可以使用反射來調用這些。
0
下面是我使用的一段代碼,剝離了公司特定的內容。一旦你加載了程序集(如果這段代碼爲你加載程序集,我記不起頭腦),這是一種享受。
public static IMyType GetInstanceOfMyType()
{
var myTypeDescriptor = "My.Fully.NameSpaced.TypeName, My.Assembly.Name, Version=1.0.0.0, Culture=neutral"
IMyType _instance = null;
try
{
var myType = Type.GetType(myTypeDescriptor, true, true);
if (inst.GetInterface("IMyType") != null)
{
// For a constructor that takes a single parameter, that's a string
var constructorInfo = myType.GetConstructor(new Type[] { typeof(string) });
_instance = (IMyType)constructorInfo.Invoke(new object[] { "String to Pass To Constructor" });
}
else
{
// Type isn't correct, complain here.
}
}
catch (Exception ex)
{
// Log any errors here
}
return _instance;
}
的「任何錯誤」通常是一個:
- 你已經在
myTypeDescriptor
命名不存在 - 你已經在
myTypeDescriptor
命名類型不類型實現IMyType - 您在
myTypeDescriptor
中命名的類型沒有與您在調用GetConstructor時指定的類型相匹配的構造函數 - 構造函數拋出異常;如果是這樣,它可以在
ex.InnerException
相關問題
- 1. 在自定義對象的javascript中創建一個數組
- 2. 在ggplot2中創建一個自定義的Stat對象
- 3. 刪除在DLL中創建的對象
- 4. factory_girl - 如何在另一個對象的定義內創建一個對象
- 5. 如何創建一個有條件定義類型的對象?
- 6. 有沒有辦法在Visual Studio intellisense中定義一個未定義的對象?
- 7. 如何在Spring 4中從Bean定義創建一個對象?
- 8. 在類定義中創建對象
- 9. 我可以創建一個在NSMutableSet中使用的自定義對象嗎?
- 10. C#如何創建沒有類定義的對象?
- 11. 創建自定義對象
- 12. 創建類的對象從一個文件中,沒有重複的對象
- 13. 在Javascript中,有沒有一種方法可以統計我創建了多少個創建的對象?
- 14. 有沒有辦法在foreach循環中創建一個數組中的對象
- 15. 有沒有辦法獲得創建另一個對象的對象的實例?
- 16. 創建一個沒有現有類的對象
- 17. 創建與LINQ和EF對象沒有定義其字段
- 18. 創建對象並傳入元素,讓元素沒有定義
- 19. 工廠無法創建一個IIFE對象中定義
- 20. 當我創建對象的數組,我得到了一個未定義
- 21. 從庫中創建一個沒有任何新代碼的DLL
- 22. 我應該每次創建一個新對象還是創建一個對象?
- 23. 我的模型沒有創建對象並且沒有提示
- 24. 創建自定義對象(兩個對象的組合)
- 25. 創建一個對象並在另一個對象中使用
- 26. 在一個對象中創建一個對象類
- 27. 在一個經典的asp/vbscript文件中沒有創建對象的COM包裝的dll
- 28. 給定一個配置對象,我該如何創建一個PropertiesConfiguration對象?
- 29. 是否有可能在C#中創建一個沒有類的對象?
- 30. 創建一個Jquery對象的對象
道歉發現它在VB.net是,你可能有一點小麻煩,改成VB.net,因爲它沒有做什麼特別神祕=) – Rob 2010-07-23 14:18:13
沒有任何問題,我一般更喜歡C#。這個項目恰好在VB中。 – JupiterP5 2010-07-23 15:35:41