this stackoverflow question에서 알았는데 프리즘/유니티는 제가 생각한 것처럼 디커플링되지 않았습니다., 예. 생성자에 menuManager가 삽입 된이 클래스가 있다면 이 클래스가 실제로 어딘가에 존재하는지 확인하십시오. (클래스를 포함하는 .dll을 가져올 수 있다고 생각하고 컨테이너는 제안 된 나는 아무것도하지 않습니다 만 유지하는 NullMenuModule을 할 수있는 응용 프로그램이 그 밖에 MenuModule없이 실행 (또는 수 없습니다 : 그것은, 예를 들면 그 자리에 널) 주입 :Prism에서 모듈을 느슨하게 참조하여 존재 여부를 확인할 수 있습니까?
public class EmployeesPresenter
{
public EmployeesPresenter(IMenuManager menuManager)
{
}
}
을하지만 그 다룰 수 응용 프로그램이 중단됨).
그러나 건물중인 응용 프로그램은 MenuManager 클래스을 MenuModule에 포함하고 있으며 모든 모듈은 MenuManager를 사용하여 메뉴에 모든 항목을 등록해야합니다. 그러나 을 교환 할 수 있기를 원합니다. MenuModules 예. InfragisticsMenuModule이 내가 예에서 오전 때 등 TelerikMenuModule, 그러나
을 가지고 CustomersModule, TelerikMenuModule을 사용하려면 을 참조해야합니다. 그리고 InfragisticsMenuModule을 사용하려면이를 참조해야합니다. 나는 새로운 참조, 예를 들어, 모든 내 모듈을 다시 컴파일하지 않고 InfragisticsMenuModule와 "핫 스왑"TelerikMenuModule 수있을 것입니다 방법에 따라서
이와
Application.exe
Customers.dll
TelerikMenuModule.dll
: 나는 이것을 대체 할 응용 프로그램을 다시 시작할 수 단순히
Application.exe
Customers.dll
InfragisticsMenuModule.dll
그리고 그것은 새로운 InfragisticsMenuModule.dll으로 실행하고 불평하지 않는 TelerikMenuModule.dll 없음 더 이상 존재합니다. . 해당 인터페이스를 참조 할 수
public interface IMenuSystem
{
// whatever operations need to be offered by a menu system
}
Application.exe
및 Customers.dll
:
@ Earwicker :하지만 어떻게 구현할 것인가? "어떻게 Register"를 호출 할 것인가? 유니티 문서에서 "How to : 설정 파일 또는 WPF의 디렉토리에서 모듈 카탈로그 채우기"절을 읽었습니다. –
네, 맞습니다. –
이것은 올바른 기술입니다. 셸에서는 IMenuSystem을 구현하는 컨테이너에 개체를 등록합니다. "클라이언트"모듈은 단지 IMenuSystem이 필요하다고 선언하고 쉘은 Infragistics에 대해 알고 있거나 Telerik에 대해 알고있는 구현을 삽입합니다. 각 모듈은 인터페이스 정의가 포함 된 "계약"DLL을 참조 할 때만 필요합니다. 이것은 100 % 정답입니다. 우리는 우리 자신의 프로젝트에서 이것을하고 있으며 훌륭하게 작동합니다. –