我有2個dll,一個帶有一個接口,另一個實際使用接口。 我可以使用反射調用第二個dll,但我想知道是否可以使用該接口獲取有關它的更多信息。通過動態裝配加載獲取派生類?
我有類似...
,並在同一個DLL另一個接口...
需要注意的是從第一個的。
namespace Mynamespace{
public interface Interface2 : Interface1
{
int Sub(int a, int b);
}
}
我然後使用反射
// get the 2 interfaces
var asm = Assembly.LoadFile(dllInterfacePath);
var type1 = asm.GetType("Mynamespace.Interface1");
var type2 = asm.GetType("Mynamespace.Interface2");
// get the main class
var asmDll = Assembly.LoadFile(dllPath);
var type = asmDll.GetType("MyMS.SomeClass");
// create an instance
var instance = Activator.CreateInstance(type, null);
現在我的問題是我怎麼能告訴我們,如果創建的實例衍生關閉Interface2
或Interface1
,我可以尋找方法「子(調用方法.. 。「),如果它不存在,那麼我知道它是Interface1
。
但我想知道是否有更好的功能來動態實現這一目標?
我不能使用
typeof(Interface1).IsAssignableFrom(typeof(MyMS.SomeClass));
既是Interface1
和MyMS.SomeClass
是動態加載,並在項目未引用。
@ wiktor-zychla,我已經編輯它來澄清爲什麼這不是重複的。 – FFMG
您不必使用'typeof'來獲取類型引用。 api也適用於動態加載的類型。 –
對不起,但它不起作用。 ''typeof(Interface1).IsAssignableFrom(typeof(MyMS.SomeClass));''或''type.IsAssignableFrom(type1);''不起作用 – FFMG