2010-01-28 2 views
1

나는 C# 응용 프로그램에서 플러그인 또는 확장 기능을 얻는 단계는 무엇입니까?

지금 시간이 C#을왔다 등 동적으로 LoadLibrary, GetProcAddress과 DLL이로드 확장 점과, 년에서 Win32 & C/C++에서 플러그인 아키텍처를 완료했습니다. 해당 단계는 무엇입니까 - 동적으로 어셈블리를로드합니까? 아니면 완전히 다른 스키마입니까?

+1

http://stackoverflow.com/questions/tagged/ioc+c%23 및 http://stackoverflow.com/questions/tagged/plugins+c%23 – jmservera

+0

@jmservera : 해당 링크가 유효하지 않습니다. –

+0

@ 케빈 브록, 그들이 깨진 것을 의미한다면 그 것들을 확인하십시오 : http://stackoverflow.com/questions/tagged?tagnames=ioc%2bc%23&sort=votes http://stackoverflow.com/questions/tagged? tagnames = plugins % 2bc % 23 & sort = votes – jmservera

답변

3

일반적으로 플러그인을 어디에서 볼 수 있으며 어셈블리를로드하고 특정 클래스를 찾을 수 있습니다. 보통 플러그인은 일종의 플러그인 기본 클래스를 확장하거나 인터페이스를 구현하여 스스로를 광고합니다.

또 다른 옵션은 MEF이며 .NET 4에는 포함되지만 미리보기 릴리스는 현재 .NET 프레임 워크에서 작동합니다.

+0

MEF는 잠시 동안 있었고 3.0이 아니라면 3.5에서 실행됩니다. – Jay

+0

@ 제이 : 현재 실행 중이 아닌 * 것에 대해 뭐라 말 했나요? 그래도 명확히 해. 그러나 응용 프로그램에서 미리보기 릴리스를 사용하는 것이 얼마나 좋은지 잘 모르겠습니다. 나는 그것을 한 번 그리고 지금까지 API가 상당히 바뀌 었습니다. – Joey

1

.Net 응용 프로그램에서는 AppDomain과 AppDomain.CurrentAppDomain을 사용하여 응용 프로그램에 어셈블리를 동적으로로드 할 수 있습니다. 문제는 AppDomain에로드 된 어셈블리를 언로드 할 수 있다는 것입니다.이 문제를 해결할 수있는 해결 방법이 있습니다. 이러한 종류의 어셈블리를 다른 AppDomain에로드하고 어셈블리를 필요로하지 않을 때마다 언로드 할 수 있습니다. 그러나 두 가지 AppDomain에서 두 어셈블리 사이에 개체를 전달하기 때문에이 방법은 매우 복잡합니다.

+0

"... can load ..."대신에 "can * NOT * load"를 의미한다고 생각합니다. –

+0

다른 AppDomain을 언로드 할 수 있다는 것을 의미했습니다. – Beatles1692

+0

쉽지 않은 물건을 전달하고 많은주의를 기울여야합니다. , 약간의 실수를하고 메인 appdomain이 자동으로 어셈블리를로드하게하는 것은 매우 쉽습니다. – jmservera

관련 문제