我使用visual studio创建了一个Windows应用程序,我遇到了以下问题。
我收到循环依赖错误,因为我有这个设置:
project1.classA.cs
project2.classB.cs
project2.classC.cs
现在,classB有一个classA的成员,所以我添加了对project1的引用。现在我希望A类在classC中使用静态函数。但是由于循环依赖性,我无法添加对project2的引用。有没有什么方法可以解决这个问题,而不是让我创建一个新项目?
答案 0 :(得分:1)
我认为你最好提取常用的方法和接口,并将它们放在一个单独的类库中。
但是,通过为C类创建一个接口并将其放在项目1中,可以在不编写新类库的情况下完成它:
public interface IClassC
{
void Method1();
void Method2();
}
然后在项目1中,您可以使用依赖注入将其传递给ClassA
构造函数:
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 :(得分:1)
这不是一个很好的情况,但是你不想创建一个新项目的事实让我相信你已经考虑了所有明智的选择。
我认为唯一的选择是将文件project2.classC.cs
本身添加到project1
,但请务必勾选“包含为链接”。选择'中的选项对话框,以便您不要复制。这不好,但它应该有效。
右键点击该项目,选择Add
- > Existing Item
,选择该文件,然后点击Add
按钮右侧的下拉菜单,然后选择{ {1}}。