2011-08-09 1 views
1

Visual Studio 2010과 유사한 메뉴 및 컨텍스트 메뉴 아키텍처를 사용하여 현재 메뉴에 확장으로 제공되는 추가 하위 항목을 확장 할 수 있습니다. MEF (Managed Extensibility Framework)를 사용하고 있습니다. 예를 들어, Resharper 확장 기능은 가능한 모든 위치 (컨텍스트 메뉴의 상단, 가운데 또는 하단 또는 메뉴 항목)에 메뉴 항목과 컨텍스트 메뉴 항목을 추가합니다. 어떻게 이러한 기능을 제공 할 수 있습니까? 쉘의 모든 단일 메뉴 항목을 색인화하고 하위 항목에 색인을 배치하려면 색인을 참조해야합니까? 제 질문이 충분히 분명하기를 바랍니다. 그렇지 않다면 나는 약간의 설명을 추가하는 것보다 행복 할 것이다.MEF를 사용하여 .NET 응용 프로그램에서 메뉴 및 컨텍스트 메뉴 확장

답변

0

이 작업을 수행하는 가장 좋은 방법은 하나도 없습니다. 하지만 고려해야 할 몇 가지 아이디어는 다음과 같습니다.

간단한 계약 (즉, IMenuIten)을 사용하고 메타 데이터를 사용하여 명령이 나타나는 메뉴의 위치와 위치를 제어하는 ​​것이 좋습니다. 이를 수행하는 한 가지 방법은 각 항목이 메뉴의 절대 위치를 알 필요가 없도록 메뉴에서 항목을 정렬하는 데 사용되는 두 배가되어야하지만 "색인"을 갖는 것입니다. 또 다른 방법은 메뉴 항목에 메타 데이터를 사용하여 현재 항목 앞뒤에 있어야하는 다른 항목의 목록을 제공하는 것입니다. 그런 다음 메뉴 항목에 토폴로지 정렬을 수행하여 메뉴 항목을 표시 할 순서를 얻을 수 있습니다.

메뉴 비헤이비어의 복잡성/동적에 따라 내보내기를 사용하여 표현할 수없는 경우가 있습니다 메타 데이터. 이 경우 기능을 계약 자체로 옮길 수 있습니다. 즉, IMenuItem 계약에 속성이나 메서드를 추가 할 수 있습니다. 그런 식으로 코드를 실행하여 필요한 값을 계산할 수 있습니다.

다른 해결책은 메뉴 항목을 직접 내보내는 것이 아닙니다. 대신 구성 요소에서 가져 오는 메뉴 서비스를 가질 수 있습니다. 이 서비스에는 메뉴 항목을 메뉴에 추가하는 Register 메서드가 있습니다. 내 의견으로는 메뉴 항목을 추가하는 것이 꽤 번거롭기 때문에 필요없는 이유가 없다면 추천하지 않을 것입니다. 사용 가능한 메뉴 항목이 응용 프로그램의 현재 컨텍스트를 기반으로 변경되어야하는 경우 적절할 수 있습니다. 이 방법을 사용하면 메뉴 서비스를 가져 오는 클래스 만 있으면 클래스가 만들어지고 구성되지 않습니다. 클래스는 시스템에서 다른 곳으로 가져온 것을 가져와야합니다.