2011-12-19 11 views
2

これは、これはAssemblyB循環依存関係と動的アセンブリローディング

namespace AssemblyB 
{ 
    public class ClassB 
    { 
     public int Sum(int left, int right) 
     { 
      return left + right; 
     } 

     public int MultiplyTheSumByFactor(int left, int right, int factor) 
     { 
      // ClassA a = new ClassA(); // can't reference AssemblyA 
      int sum = Sum(left, right); 
      Type type = Assembly.GetCallingAssembly().GetTypes().First(); 
      object a = Activator.CreateInstance(type); 
      return (int)type.GetMethod("Multiply").Invoke(a, new object[] { sum, factor }); 
     } 
    } 
} 

AssemblyAであるAssemblyA

namespace AssemblyA 
{ 
    public class ClassA 
    { 
     public static void Main(string[] args) 
     { 
      ClassB b = new ClassB(); 
      Console.WriteLine(b.MultiplyTheSumByFactor(2, 3, 4)); 
      Console.ReadKey(); 
     } 

     public int Multiply(int left, int right) 
     { 
      return left * right; 
     } 
    } 
} 

であるAssemblyBを参照するコンソールアプリケーションです。

AssemblyAAssemblyBから参照できないのですが、AssemblyA〜 の反射を読み込み、それでもメソッドと呼んでもいいですか?

明らかにこれをやりたい理由はありませんが、私は、これを反映させるためにコンパイラ/ CLRがどのように動作するのか不思議です。

答えて

4

アセンブリをコンパイルするには、その依存関係にリンクする必要があるためです。 Aの依存関係がまだコンパイルされていない場合(Aを参照するため)、あなたは鶏と卵の問題に終わります。

+0

はい、何が先に来たのですか? ;-) –

関連する問題