[英]Retrieving all namespace Types
我有一個項目引用了一個名為“ EquipmentDrivers”的名稱空間,該名稱空間包含在實驗室中運行Voltmeter / Sourcemeter / NetworkAnalyzer機器的類。 (即:Agilent66XX,Keithley2400)
我想遍歷命名空間中的一類類型,以查找與包含類的確切名稱的字符串相對應的類型。 (即:string equipmentName =“ Keithley2400”,驅動程序是公共類Keithley2400)
我該怎么做呢? 以下是我的第一次嘗試:
Type[] NamespaceTypes;
Assembly myAssembly = Assembly.Load("EquipmentDrivers");
NamespaceTypes = myAssembly.ManifestModule.GetTypes();
for (int i = 0; i < NamespaceTypes.Length; i++)
{
if (NamespaceTypes[i].ToString() == equiptmentName)
{
return new NamespaceTypes[i](primaryGPIBAddress, true);
}
}
好了,現在我有了這個
public SourceMeter ReturnSourceMeter(string equiptmentName, int primaryGPIBAddress)
{
Assembly myAssembly = Assembly.LoadFrom("EquipmentDrivers.dll");
var namespacePrefix = "EquipmentDrivers.";
var fullName = namespacePrefix + equiptmentName;
var type = myAssembly.GetType(fullName);
return (SourceMeter)Activator.CreateInstance(type, primaryGPIBAddress, true);
/*
if (equiptmentName == "Keithley2400")
{
return new Keithley2400(primaryGPIBAddress, true);
}
else if (equiptmentName == "Agilent66XX")
{
return new Agilent66XX(primaryGPIBAddress, true);
}
return null;
*/
}
這個對嗎? 順便說一句,感謝一百萬個家伙,測試實驗室中沒有一個人知道如何做到這一點
命名空間不屬於.NET類型系統。 它們是大多數語言提供的便利。 存儲的名稱實際上是標准名稱:名稱空間和類名稱。
var namespacePrefix = "EquipmentDrivers.";
var fullName = namespacePrefix + equiptmentName;
var type = myAssembly.GetType(fullName);
return Activator.CreateInstance(type, primaryGPIBAddress, true);
您還可以將ReturnSourceMeter
方法移至驅動程序部件,並在每次添加設備類型時對其進行更新。
您可以通過以下方式查找類型並從中創建實例:
Assembly SampleAssembly = Assembly.LoadFrom("your.dll");
var type = SampleAssembly.GetTypes().FirstOrDefault(t => t.Name == "YourTypeName");
var instance = Activator.CreateInstance(type);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.