2009-05-31 2 views
1

Visual Studio 2008의 Visual Studio Add-in에서 서버 제품의 컨텐트에 대한 뷰를 제공하는 트리 뷰를 표시하고 있습니다. 서버 제품에는 여러 유형의 노드가 있으며 각 노드에는 고유 한 유형의 컨텍스트 메뉴 (오른쪽 클릭 메뉴)가 있습니다.노드 유형 및 양식 트리 뷰의 컨텍스트 작업에 대한 확장성에 대한 최선의 접근 방법

노드에 연결된 새로운 유형의 노드와 작업에 대해서는 현재 두 개의 코드를 추가합니다. 노드 유형과 노드에서 사용할 수있는 작업을 분리하여 플러그인 모델로 컨텍스트 메뉴에 노드와 항목을 추가 할 수있는 몇 가지 방법에 대해 설명합니다. 아마도 MEF가 좋은 후보자가 될 것입니다. 누구나 간단하고 직접적인 방법으로이를 구현하는 방법에 대해 좋은 아이디어를 가지고 있습니까? 특히 플러그인 개발자가 많은 배관 작업을 수행 할 필요가 없도록해야합니다.

답변

1

귀하의 코드와 플러그인 라이브러리가 모두 연결되는 공용 라이브러리 (계약 종속성이라고 함)를 제공합니다. 여기서 INodeType과 같은 노드 유형에 대한 인터페이스를 정의하십시오. 또한 INodeType을 구현하는 AbstractNodeType을 구현하는 것을 고려하고 플러그인 작성자가 생성자에서 설정할 수있는 유용한 속성을 제공하십시오.

INodeType의 속성 중 하나는 Windows Forms 상황에 맞는 메뉴를 반환하는 ContextMenu 속성입니다. 당신이 구성 한 후 그냥 통해 열거 할 수

[Import("NodeTypes", typeof(INodeType))] 
public IEnumerable<INodeType> extensionNodeTypes { get; set; } 

: 코드에서

는 속성을 확인하십시오. 내가 엉망 구문을하지 않았다 희망

[Export("NodeTypes", typeof(INodeType))] 
public class SomeNodeType : AbstractNodeType 
{ 
    public SomeNodeType() 
    { 
     this.ContextMenu = base.BuildContextMenu(/* ... */); 
     /* etc. */ 
    } 
    /* ... other custom logic ... */ 
} 

,하지만 일반적인 생각입니다 : 플러그인 코드에서

, 그들은이 같은 새로운 노드 유형 뭔가를 (컴파일하지 않을 수 있습니다) 선언합니다.

+0

아직 이해가되지 않습니다. 이 방법은 어셈블리를 추가 (및 등록)하여 플러그인 추가를 지원합니까, 아니면 기본 응용 프로그램을 다시 컴파일해야합니까? [가져 오기 ...] 및 [내보내기 ...]는 무엇을합니까? –

+0

플러그인을 추가하기 위해서해야 할 일은 코드가 플러그인을 찾고있는 디렉토리에 더 많은 DLL을 놓고이 유형 (INodeType)의이 계약 이름 (NodeTypes)을 내보내는 것을 찾을 수 있습니다. 내 대답은 MEF에 대한 기본 소개가 있다고 가정합니다. http://www.codeplex.com/MEF –

+0

이 경우 새 플러그인을 보려면 코드를 다시 시작해야하지만 해당 사이트에 예제가 있습니다 다시 시작하지 않고 새 플러그인을 찾을 수있는 "다시 작성"하는 방법. –

관련 문제