2010-05-17 2 views
0

저는 C# -project에 대한 전략적인 질문이 있습니다. 나는 플러그인 개념을 구현하고 플러그인이 주 프로젝트의 데이터를 조작하는 최선의 방법으로 고심하고 싶다.PlugIn-Concept에서의 데이터 조작

처음에는 필자는 주 프로젝트에서 플러그인을로드 할 때 클래스를 플러그인 클래스로 식별 할 수있는 플러그인 인터페이스를 정의하는 "마스터"플러그인 프로젝트를 만들었습니다.

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] 
public sealed class GraphViewerPlugInAttribute : Attribute 
{ 
} 

public interface IGraphViewerPlugIn 
{ 
    Panel GetRightSidePanel(); 
    string Name(); 
} 

이 프로젝트는 주 프로젝트 및 플러그인 클래스에서 참조됩니다. pluginclass는 인터페이스를 구현합니다 ...

[GraphViewerPlugIn] 
public class myTestPlugIn : IGraphViewerPlugIn 
{ 
    public Panel GetRightSidePanel() 
    { 
    Panel myPanel = new Panel(); 
    myPanel.BackColor = System.Drawing.Color.Red; 

    return myPanel; 
    } 

    public string Name() 
    { 
    return "TestPlugIn"; 
    } 
} 

... 및 기본 프로젝트는 특정 디렉토리에 저장된 모든 플러그인을로드합니다.

지금까지 꽤 잘 진행되었지만 PlugIn에서 특수 패널을 얻을 수는 있지만 지금은 PlugIn에서 기본 프로젝트의 데이터를 조작하고 싶습니다. 그렇게하는 가장 좋은 방법은 무엇입니까? "Master Plugin Project"에 정의 된 일종의 데이터 컨테이너 클래스가 있습니다. 플러그인은 데이터를 해당 컨테이너에 저장하고 데이터가 변경된 이벤트를 통해 주 프로젝트를 인식하고 변경된 데이터를 확인한 다음 변경 사항을 적용 할 수 있습니다. 올바른 방향인지, 고려해야 할 사항과이를 구현하기 위해 어떤 기법 (즉, 이벤트, 정적 클래스 ...)을 사용해야합니까?

답변

0

한 가지 방법은 구성을 위해 설계된 인터페이스에서 메소드를 활성화하는 구성 버튼을 추가하는 것입니다.

이 방법은 Windows 양식을 자체 호출하는 것을 포함하여 플러그를 구성하려는 모든 코드를 사용할 수 있습니다.

사용자 정의 UI가 아닌 Windows Forms 또는 winfx를 사용하는 경우 구성 창을 요청한 경우를 제외하고 플러그인과 관련된 모든 로직을 응용 프로그램 자체에서 제거하므로 이상적인 방법입니다. 물론

public interface IGraphViewerPlugIn 
{ 
    Panel GetRightSidePanel(); 
    string Name(); 
    void ShowConfigurationDialog(); 
} 

, 당신은 다음과 같은 ShowConfigurationDialog을 구현 : MyConfigurationDialog 당신의 디자이너가 플러그인을 구성하는 양식을 작성

public void ShowConfigurationDialog() 
{ 
    Form form = new MyConfigurationDialog(); 
    form.ShowDialog(); 
} 

.