2010-06-01 3 views
6

저는 애플리케이션에 대한 플러그인 지원을 제공하는 다양한 방법을 모색하고 있습니다. 이상적으로, 필자는 핵심 기능을 생성하고 가져 오기, 데이터 내보내기 등과 같은 다양한 플러그인/애드온을 개발하는 다른 고객을 기반으로 할 것입니다. 플러그인 아키텍처를 통해 확장 가능한 C# 응용 프로그램을 제작하는 데 사용할 수있는 몇 가지 방법은 무엇입니까?C에서 동적 플러그인 기반 기능을 개발하는 방법

사례를 구성하십시오. 우리가 메인 메뉴 (File, Edit, View 등)와 함께 제조사별로 그룹화 된 여러 브랜드의 자동차를 표시하는 TreeView (Ford, GM, 현재)로 구성된 프로그램이 있다면. 자동차를 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴가 '자동차 삭제'라는 유일한 옵션으로 표시됩니다.

한 고객이 TreeView에서 새로운 브랜드를 볼 수있게 해주는 플러그인을 배포 할 수 있도록 응용 프로그램을 개발하면 혼다 (Honda)와 자동차 컨텍스트 메뉴가 확장되어 이제는 '자동차 칠해'?

Eclipse/RCP 개발에서이 기능은 확장 점과 플러그인으로 쉽게 처리됩니다. C#이 어떻게 처리합니까? 나는 내 자신의 플러그인 아키텍처를 개발하고 MEF를 읽으려고했다.

답변

10

MEF 시작하는 것이 좋습니다.

글렌 블록의 기사 Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework은 좋은 개요를 제공합니다.

제목에 속지 마십시오. MEF for .NET 3.5 SP1을 얻을 수도 있습니다.

+0

로딩 어셈블리, catelogs 및 컨테이너의 사용을 보여주는 MEF 동영상을 많이 보았습니다. 그러나 MEF가 메인 메뉴 또는 컨텍스트 메뉴를 수정하는 플러그인을 배포하는 방법을 아직 완전히 이해하지 못했습니다. 주어진 통제. 나는 비디오가 묘사하는 것으로부터의 최종 점프를 놓치고 있고, 플러그인 i의 선물에 대한 응답에 내 애플리케이션을 허용하고 있다고 생각한다. 예를 들어 주 메뉴에 새 메뉴 버튼을 추가합니다. – Matthew

+0

MVVM (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)을 사용하면 알아낼 수 있어야합니다. 이렇게하면 Menus 및 MenuItems를 기본 (플러그 가능) 객체 모델에 바인딩 할 수 있습니다. –

1

Visual Studio 2010은 MEF를 사용하므로 MS에가는 것이 가장 좋습니다. System.Addin은 항상 약간 무거워 보였지만 항상 작동하기 위해 addins가 필요하고 코드베이스가 끊임없이 진화하고 있다면 더 나은 선택 일 수 있습니다.

추가 기능 분리에 신경 쓰면 AppDomains를 읽어야합니다. 나는 당신이 흥미를 가질만한 isolating assemblies within an AppDomain here을 다루는 방법을 배우기 위해 만든 데모 프로젝트를 가지고 있습니다. 격리에 대한 간단한 사실 : 유형 만 경계를 넘어야하며 이러한 유형은 상호 도메인 이벤트 처리에서 비명을지며 실행되어야하며 addins는 MarshallByRefObject를 확장해서는 안됩니다.

관련 문제