一般的なメソッドとインターフェイスを抽出して別のクラスライブラリに入れた方がよいと思います。
しかし、クラス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());
しかし、繰り返すために:あなたは本当に共有インターフェイスを保持するために別のクラスライブラリを作成する必要があり、クラス。
各クラスのクラスコードを追加してください。 –
** C#循環依存インターフェース** –
を試してみてくださいアセンブリ間で循環参照を行うことはできますが、VSを使用して手助けすることはできず、ビルドをカスタマイズする必要があります。 。あなたがこの道を歩む前にあなたが本当に必要としていることを確かめてください。 VSの奇妙なエディションを使用していますか?作成するプロジェクトごとに料金を支払う必要がありますか? –