나는 완전히 내 대답은 귀하의 질문에 편집에 따라 재 작성
편집.
최소 단계만으로 플러그인 아키텍처를 구현하는 것이 얼마나 쉬운 지 보여 드리겠습니다.
1 단계 : 플러그인에서 구현할 인터페이스를 정의하십시오.
namespace PluginInterface
{
public interface IPlugin
{
string Name { get; }
string Run(string input);
}
}
2 단계 : IPlugin를 구현하는 플러그인을 작성합니다.
namespace PluginX
{
using PluginInterface;
public class Plugin : IPlugin
{
public string Name
{
get { return "Plugin X"; }
}
public string Run(string input)
{
return input;
}
}
}
3 단계 : 플러그인을 실행합니다.
namespace PluginTest
{
using System;
using System.IO;
using System.Runtime.Remoting;
using PluginInterface;
class Program
{
static void Main(string[] args)
{
string pluginFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PluginX.dll");
ObjectHandle handle = Activator.CreateInstanceFrom(pluginFile, "PluginX.Plugin");
IPlugin plugin = handle.Unwrap() as IPlugin;
string pluginName = plugin.Name;
string pluginResult = plugin.Run("test string");
}
}
}
이 그냥 플러그인 architechure의 기본, 가장 간단한 예이다 명심하십시오. 당신은 또한
- 같은 일들이 어느 인터페이스, 추상 클래스를 선택 그 자체
AppDomain
- 의 내부 플러그인을 실행하는 플러그인 호스트를 생성 할 또는
- 사용 반사와 플러그인을 장식하는 속성 수, 인터페이스 , 지연 바인딩 작업을 수행하기 위해 IL에서 방출 한 썽크 또는 대표자
디자인에 따라 결정됩니다.
플러그인 아키텍처가 간단하지 않습니다. 단순한 것이라면 모든 소프트웨어 스택 및 프로그래밍 언어에 디자인에 포함됩니다. 각 플러그인은 정의 된 방식으로 핵심 프로그램과 통신해야합니다 (그렇지 않으면 별도의 프로그램 일 것입니다). – Aron