2014-03-03 2 views
4

두 개의 어셈블리로 구성된 WPF 응용 프로그램이 있습니다.이 프로젝트를 추가하면 순환 종속성이 발생합니다.

어셈블리 A는 wpf 응용 프로그램입니다.

조립 B 조립 BI에 이벤트가 발생이 방법으로 호출해야 할 때 3D 응용 프로그램이

조립 A가

이제 조립 B.에 대한 참조가 주로 A. 사용하는 공용 API 엉입니다 어셈블리 정적 클래스 응용 프로그램에서.

adding this project will cause a circular dependency

당신이 그것을 해결하는 방법에 대한 아이디어를 가지고 수행

나는 B에서 조립체 (A)에 대한 참조를 추가하려고하면

는 오류가 발생합니다?

특히 내가 알고 싶습니다 :

  • 어떻게 assembly B에서의 App.myMethod()를 호출?
  • 클래스를 분리하려면 어셈블리 B에서 일반 이벤트를 실행하고 어셈블리 A에서 catch 할 수 있습니까?
  • 다른 아이디어를 환영합니다.
+0

이벤트는 어떻게 생성됩니까? 초기화의 일부로 이벤트를 생성 할 때'정적 클래스 '를 이벤트에 전달할 수 있습니까? –

+1

제어 패턴의 반전은이 경우를 처리하기위한 것입니다. – Matt

+0

두 어셈블리의 소스 코드를 변경할 수 있습니다. 지금 어셈블리 B의 이벤트 처리기는 private void OnTouchDownHandler (개체 보낸 사람, Windows7.Multitouch.TouchEventArgs e) { AddTouchDown (e.Id, e.Location)입니다. } – GibboK

답변

7

How do I call App.myMethod in A from assembly B?

당신이 할 수없는 이벤트가 는 몇 가지 클래스 형성이 해당 이벤트에을 가입해야합니다 B 일부 클래스에서를 해고하는 경우 A는 B에

을 의존하는 경우 :

을 A의

번호 :

var classB = new ClassB(); // presumably in your code in A somewhere 
classB.MyEvent += new EventHandler(this.HandleEventFromB); 


public void HandleEventFromB(object sneder, EventArgs args) 
{ 
    ClassA.StaticMethod(); 
} 

그 방법은 A.

B 0123에 의존하지

당신은 A.에서에 가입하기 위해에 "버블"일부 공개적으로 노출 이벤트에 B에서 이벤트를해야 할 수도 있습니다

는 대신, 내장 된 DLL에 대한 참조를 추가 할 경우 추가 할 수 있습니다
0

소리가 디자인 문제와 유사합니다. 귀하의 구현에서 구체적인 세부 사항을 알지 못하기 때문에 다음을 지침/아이디어로 삼으십시오.

B에서 이벤트가 발생하면 일부 데이터가 생성된다고 가정합니다. 이 데이터를 데이터베이스 또는 이와 유사한 형태로 저장 한 다음 애플리케이션 A에서 본질적으로이 데이터를 청취 한 다음 필요에 따라 업데이트 할 수있는 시간 초과 이벤트가있을 수있는 경우

2

계획.

+0

여전히 순환 종속성이 있으며 각 프로젝트를 별도로 빌드해야합니다. –

+1

프로젝트는 동일한 솔루션에서 동시에 빌드 될 수 있으며 프로젝트 참조로 추가 할 수 없습니다. 이것은 가장 우아한 해결책이 아닌 바로 이런 식으로 작동합니다. – WraithNath

관련 문제