2011-01-20 5 views
8

기본 플러그인 아키텍처를 사용하기 위해 개발 한 프로그램이 있습니다. 효과적으로 프로그램을로드 할 때 리플렉션을 사용하여 디렉토리를 검색하여 특정 인터페이스에 맞는 dll을 찾은 다음로드합니다. 이제 플러그인의 현재 목록이 모두 사용 된 것으로 보입니다.C# DLL의 플러그인 아키텍처

따라서 현재 dll 파일을 검사하는 것이 가장 좋습니다. 그렇지 않으면 각 dll을로드하는 더 나은 방법이 있습니까?

감사합니다.

+0

샘플 코드를 사용하여 질문을 조금 명확하게 할 수 있습니까? 나는 이미 플러그인 디렉토리에서 dll을 스캔하는 매우 유사한 플러그인 아키텍처를 개발했기 때문에 이것을 묻습니다. 관련 출처를 볼 수 있다면 조언을 줄 수있을 것 같습니다. – HuseyinUslu

+0

"dll은 특정 인터페이스에 적합합니다"라는 말은 모든 플러그인 어셈블리를 항상로드하고 인터페이스에 대해 클래스를 검사한다는 의미입니까? reflectionOnly로드를 사용합니까? "플러그인의 현재 목록이 모두 사용됩니다"에 대해 더 자세히 설명해 주실 수 있습니까? 어셈블리를 성공적으로로드 한 후에도 플러그인을 전혀 찾지 못했다는 의미입니까? "각 dll을로드하는 더 좋은 방법이 있습니까?" 정확히 무엇에 비해? 흥미로운 주제이지만 더 많은 정보를 얻지 않고는 도움을받을 수 없습니다. –

+0

나는 진짜로 제목을 바꾸는 힘을 가진 누군가를 요구하고 싶으면! IMO는 OP가 무엇을 기반으로했는지에 대한 오해를 불러 일으켰습니다. 나는 질문에 태그를 다시 붙였다. – gideon

답변

14

자신의 종류의 플러그인 아키텍처를 빌드했거나 빌드하려고하는 것처럼 보입니다. .NET은 이미 당신이 찾고있는 것을 가지고 있기 때문에 그렇게 좋은 생각은 아닙니다.

.NET에는 플러그인을 허용하는 2 가지 방법이 있습니다.

  1. System.Addin
  2. MEF - 나는 거의/들었어요 그것에 대해 많이 읽고 -

(1) System.Addin는 확장 성 프레임 워크 을 관리. 하지만 당신은 여기에 몇 가지 기사에서 좀 걸릴 수 있습니다 :
System.Addin article from MSDN magazine <를 주 - 2007 올해
System.Addin tools and examples at Codeplex

(2) 지금, MEF, MEF 그냥 굉장합니다! 귀하의 시스템에 플러그인 아키텍처를 소개하는 위대하고 쉬운 방법입니다. MEF는 Silverlight의 일부이기도하며 Visual Studio 2010에서는이를 사용합니다. DLL을 동적으로로드 할 수있는 DLL을 볼 수 있습니다. MEF를 사용하면 소프트웨어로 패키지 한 클래스를 자신의 어셈블리 (.exe)에 넣을 수 있고 그런 다음 MEF를 사용하여 동적으로 찾을 수 있습니다 미래에 당신이 필요로하는 수업을받을 dlls. 전체 절차 자체는 MEF에서 매우 간단합니다.MEF is Open Source on Codeplex

Mike Taulty has a brilliant video series on MEF

MEF Article at Codeproject - Part 1 MEF Article at Codeproject - Part 2

나는 개인적으로 당신이 당신이 좀 걸릴 수도 있으므로, 새로운, 쉽고 심지어 비주얼 스튜디오를 사용 MEF, 함께 가야한다고 생각합니다 at :
Choosing between MEF and MAF (System.AddIn)

,210

Do check out other top voted questions on the mef tag at SO

6

FileSystemWatcher 클래스를 사용하여 디렉터리의 변경 사항을 모니터링 할 수 있습니다.

publicvoid CreateWatcher() 
{ 
//Create a new FileSystemWatcher. 
FileSystemWatcher watcher = newFileSystemWatcher(); 

//Set the filter to only catch DLL files. 
watcher.Filter = "*.dll"; 

//Subscribe to the Created event. 
watcher.Created += new 
FileSystemEventHandler(watcher_FileCreated); 

//Set the path to C:\Temp\ 
watcher.Path = @"C:\Temp\"; 

//Enable the FileSystemWatcher events. 
watcher.EnableRaisingEvents = true; 
} 

는 그 다음은 플러그 앤 플레이 일 :

3

가이 플러그인 디자인을 만들기위한 매우 강력한 건축 솔루션입니다 MEF 을 참조하게된다.

1

좋습니다. 또는, 해당 폴더에 DLL이 여러 개 있으면 응용 프로그램에 영향을 미칠 수 있고 다른 사람이 DLL을 해당 폴더에 넣을 수 있기 때문에 보안 문제가 발생할 수 있다고 생각되는 경우 구성 파일에로드 할 어셈블리를 정의 할 수 있습니다.

0
  • 은 평균 플러그인 때문에 "당신이 사전에로드 할 DLL을 알고이 donot" "알 - DLL"당신이로드 및 인터페이스 구현을위한 검색 및 종류를 사용해야 초기 바인딩 THS 할 수있는 방법이 없습니다 후기 바인딩.
  • "configfile 편집"대신 "dll 검색"은 매우 사용자 친화적입니다. 대부분의 경우 dll 검색은 프로그램 시작시 한 번만 수행 된 이후 성능 문제가 아닙니다.

생각해 보면 디자인에 문제가 없습니다.

0

시나리오에서는 MEF와 해당 디렉토리 카탈로그를 사용하여 특정 폴더에서 플러그인을로드하는 것이 좋습니다. MEF의 재구성 기능 덕분에 파일 시스템 감시자를 추가로 구성하고 폴더 변경시 DirectoryCatalog를 새로 고치면 런타임에 새 플러그인을 가져올 수 있습니다! BTW, nice recomposition sample I did for one of my MEF talks을 볼 수 있습니다.