2014-10-17 123 views
-3

我在两个项目下面有两个类,每个类需要调用其他类的方法。 但不能相互添加引用,因为它正在创建循环依赖关系。循环依赖的解决方案

我知道我必须使用界面来解决问题,但我不能满足答案。 请让我知道如何执行&解决这个问题。

项目的Test2

namespace Test2 
    { 
     public class ClassTest2 
     { 
      public string GetClassTest2() 
      { 
       return "classTest2"; 
      } 
     } 
    } 

项目Test1的

namespace Test1 
{ 
    public class ClassTest1 
    { 
     public string GetClassTest1() 
     { 
      return "classTest1"; 
     } 
    } 
} 
+1

如何将你的个别班级正在获得另一班的实例? – Paddy 2014-10-17 13:28:05

+3

代码示例在这里没有添加任何内容 - 它们似乎并不代表实际的问题场景,因为它们显示的都是两个完全独立的类。另外,请解释哪些障碍妨碍您将两个课程放在单个项目中。 – 2014-10-17 13:28:05

+0

可能重复的[如何解决循环引用?](http://stackoverflow.com/questions/6928387/how-to-solve-circular-reference) – Christian 2014-10-17 13:29:42

回答

1

你需要一个第三个项目中,您定义的接口:

public interface IClassNameAware 
{ 
    string GetClassName(); 
} 

无论从现有的项目,请参阅ENCE这种新的装配并使类实现的接口:

public class ClassTest1 : IClassNameAware 
{ 
    public string GetClassName() 
    { 
     return "classTest1"; 
    } 

现在,这两个类仍然不能直接访问海誓山盟,但他们接受IClassNameAware变量,即:

public bool ClassNamesEqual(IClassNameAware otherClass) 
    { 
     return GetClassName().Equals(otherClass.GetClassName()); 
    } 
} 
+0

另一种方法是创建一个单独的程序集来保存第一类和第二类的接口。然而任何需要这种“黑客”来完成的设计都需要重新考虑。 – Cameron 2014-10-17 15:57:16

+0

@Cameron在单独的程序集中定义了一个接口是非常常见的(我称之为“项目”,因为这是OP使用的术语)。想想ADO.NET和单独的提供者。创建一个包含另一个底层实现的实现来添加一个抽象层也是有意义的。 OP没有分享他的意图,但我不同意它本身就是黑客。 – 2014-10-17 17:56:04