2014-10-17 4 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

+3

코드 샘플은 아무 것도 추가하지 않습니다. 실제로 보여지는 모든 것이 완전히 독립적 인 두 가지 클래스이므로 실제 문제 시나리오를 나타내는 것으로 보이지는 않습니다. 또한 두 프로젝트를 하나의 프로젝트 안에 두지 못하게하는 장애물에 대해 설명하십시오. –

+0

가능한 순환 참조를 해결하는 방법? (http://stackoverflow.com/questions/6928387/how-to-solve-circular-reference) – Christian

답변

1

당신이 인터페이스를 정의하는 당신은 세 번째 프로젝트를해야 할 것 : 모두 기존에서

public interface IClassNameAware 
{ 
    string GetClassName(); 
} 

을 추천 프로젝트 이 새로운 어셈블리를 줬어와 클래스가 인터페이스를 구현합니다 두 클래스 여전히 직접 서로에 액세스 할 수 없습니다 이제

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

을, 그러나, IClassNameAware 변수를 받아 예를 수행

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

첫 번째 클래스와 두 번째 클래스의 인터페이스를 보유 할 별도의 어셈블리를 만드는 방법도 있습니다. 그러나이 '해킹'을 필요로하는 디자인은 다시 생각해야합니다. – Cameron

+0

@Cameron 별도의 어셈블리에서 인터페이스를 정의하는 것이 일반적입니다 (OP라고하는 용어로 "프로젝트"라고 부르기도합니다). ADO.NET과 별도의 공급자에 대해 생각해보십시오. 또 다른 기본 구현을 래핑하여 추상화 계층을 추가하는 구현을 만드는 것도 의미가 있습니다. OP는 그의 의도를 공유하지 않았지만, 나는 그 자체가 해킹이라는 것에 동의하지 않는다. –