2016-09-21 2 views
0

私のケースは少し複雑ですので、例を使って説明します。ここで別のDLLで定義されたインターフェイスを実装するクラスメソッドを取得します。

は、私の場合です:

fileA.cs

namespace companyA.testA 
{ 
    public interface ITest 
    { 
     int Add(int a, int b); 
    } 
} 

fileA.csfileA.dll

fileB.csにコンパイルされます。

namespace companyA.testB ////note here a different namespace 
{ 
    public class ITestImplementation: ITest 
    { 
     public int Add(int a,int b) 
     { 
      return a+b; 
     } 
    } 
} 

fileB.csfileB.dllにコンパイルされます。

今私はrun.csを持っている:

using System.Reflection; 

public class RunDLL 
{ 
    static void Main(string [] args) 
    { 
     Assembly asm; 
     asm = Assembly.LoadFrom("fileB.dll"); 

     //Suppose "fileB.dll" is not created by me. Instead, it is from outside. 
     //So I do not know the namespace and class name in "fileB.cs". 
     //Then I want to get the method "Add" defined in "fileB.cs" 
     //Is this possible to do? 
    } 
} 

あり、ここでの回答(Getting all types that implement an interface)です:

//answer from other thread, NOT mine: 
var type = typeof(IMyInterface); 
var types = AppDomain.CurrentDomain.GetAssemblies() 
    .SelectMany(s => s.GetTypes()) 
    .Where(p => type.IsAssignableFrom(p)); 

は、しかし、私の場合で作業することはできないようです。

+0

あなたの最後のコード例はIMyInterfaceというを使用しているが、これは前の例では何と相関しません。 –

+0

@JonathonChase最後のコードは私のものではありません。混乱の場合にコメントを追加しました。ありがとう。 – derek

+0

@derekだから、IMyInterfaceの代わりにvar type = typeof(ITest); ? – TlonXP

答えて

0

さて、あなたはすでにすぐそこasmとして利用できるアセンブリを持っているように見て:

var typesWithAddMethod = 
     from type in asm.GetTypes() 
     from method in type.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly) 
     where method.Name == "Add" 
     select type; 
関連する問題