2016-08-09 8 views
0

私はVisual Studioを使用してWindowsアプリケーションを作成していますが、次の問題があります。私は、このセットアップ持っているので、Cクラスのリファレンス#

私は循環依存関係のエラーが表示されます。今すぐ

project1.classA.cs 

project2.classB.cs 
project2.classC.cs 

を、ClassBのは、クラスAのメンバーを持っているので、私はproject1にへの参照を追加しました。クラスAでクラスCの静的関数を利用したいと思います。しかし、循環依存のためにproject2への参照を追加することはできません。これを解決する方法はありますか?私には新しいプロジェクトを作成する必要はありませんか?

+0

各クラスのクラスコードを追加してください。 –

+1

** C#循環依存インターフェース** –

+1

を試してみてくださいアセンブリ間で循環参照を行うことはできますが、VSを使用して手助けすることはできず、ビルドをカスタマイズする必要があります。 。あなたがこの道を歩む前にあなたが本当に必要としていることを確かめてください。 VSの奇妙なエディションを使用していますか?作成するプロジェクトごとに料金を支払う必要がありますか? –

答えて

1

一般的なメソッドとインターフェイスを抽出して別のクラスライブラリに入れた方がよいと思います。

しかし、クラスCのためのインタフェースを発明し、プロジェクト1でそれを置くことによって、新しいクラスライブラリを記述することなく、それを行うことが可能である:

public interface IClassC 
{ 
    void Method1(); 
    void Method2(); 
} 

そして、プロジェクト1の内部に、あなたに依存性の注入を使用することができます

public class ClassA 
{ 
    readonly IClassC _methodsFromClassC; 

    public ClassA(IClassC methodsFromClassC) 
    { 
     _methodsFromClassC = methodsFromClassC; 
    } 

    public void SomeMethod() 
    { 
     _methodsFromClassC.Method1(); 
     _methodsFromClassC.Method2(); 
    } 
} 

次にプロジェクト2に、あなたが静的ClassCを使用してそのインターフェイスを実装する必要があります:

コンストラクタに渡します
public static class ClassC 
{ 
    public static void Method1() 
    { 
     Console.WriteLine("ClassC.Method1()"); 
    } 

    public static void Method2() 
    { 
     Console.WriteLine("ClassC.Method2()"); 
    } 
} 

public class ClassCImpl : IClassC 
{ 
    public void Method1() 
    { 
     ClassC.Method1(); 
    } 

    public void Method2() 
    { 
     ClassC.Method2(); 
    } 
} 

あなたがClassAのインスタンスを作成するときに、あなたがClassCImplのインスタンスを渡す必要があります:

var classA = new ClassA(new ClassCImpl()); 

しかし、繰り返すために:あなたは本当に共有インターフェイスを保持するために別のクラスライブラリを作成する必要があり、クラス。

+1

インタフェースオプションは、 'ClassC'で' static'関数を呼び出すと言っているので、ここでは実行可能ではないようです。 –

+1

@Damien_The_Unbeliever投稿したコードを見てください。クラス 'ClassClmpl'を使用して静的メソッド' ClassC'内の静的メソッドにラップし、 'ClassCImpl'のインスタンスを' ClassA'コンストラクタに渡します。 –

1

これは素晴らしい状況ではありませんが、新しいプロジェクトを作成したくないという事実は、あなたがすべての賢明な選択肢を検討したと信じています。

残っている唯一の選択肢は、ファイルproject2.classC.csproject1に追加することですが、コピーを作成しないように '選択'ダイアログの 'リンクに含める'オプションにチェックを入れてください。それはいいものではありませんが、うまくいくはずです。

プロジェクトを右クリックし、Addを選択 - >Existing Itemを、ファイルを選択し、[Addボタンの右にあるドロップダウンをクリックしてAdd as Linkを選択します。

関連する問題