Get derived class via dynamic Assembly loading?
我有两个DLL,一个带有接口,另一个实际使用接口。我可以使用反射调用第二个dll,但我想知道是否可以使用接口获得更多关于它的信息。
我有点像…
1 2 3 4 5 6 7 | // the interface dll namespace Mynamespace{ public interface Interface1 { int Add( int a, int b); } } |
同一个dll中的另一个接口…请注意,它是从第一个派生出来的。
1 2 3 4 5 6 | namespace Mynamespace{ public interface Interface2 : Interface1 { int Sub( int a, int b); } } |
号
然后我调用一个使用反射的方法
1 2 3 4 5 6 7 8 9 10 11 | // 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 ); |
现在我的问题是,我如何判断创建的实例是从
但我想知道是否有更好的功能来动态地实现这一点?
我不能用
。
因为
您不必使用
Sorry, but it does not work. typeof(Interface1).IsAssignableFrom(typeof(MyMS.SomeClass)); or type.IsAssignableFrom(type1); does not work
号
它确实有效,但是通过调用
https://blogs.msdn.microsoft.com/suzbook/2003/09/19/loadfile-vs-loadfrom/
用
我刚刚重新创建了您的场景,我有一个带有接口的程序集和另一个带有实现的程序集。
1 2 3 4 5 6 7 8 9 10 11 | Assembly interfaceLib = Assembly.ReflectionOnlyLoadFrom("InterfaceLib.dll" ); Assembly implementationLib = Assembly.ReflectionOnlyLoadFrom("ImplementationLib.dll" ); var i = interfaceLib.GetType("InterfaceLib.Interface1" ); var t = implementationLib.GetType("ImplementationLib.Class1" ); var b = i.IsAssignableFrom( t ); Console.WriteLine( b ); // prints"true" |
如果我切换到