나는 C# 응용 프로그램에서 플러그인 또는 확장 기능을 얻는 단계는 무엇입니까?
지금 시간이 C#을왔다 등 동적으로LoadLibrary
,
GetProcAddress
과 DLL이로드 확장 점과, 년에서 Win32 & C/C++에서 플러그인 아키텍처를 완료했습니다. 해당 단계는 무엇입니까 - 동적으로 어셈블리를로드합니까? 아니면 완전히 다른 스키마입니까?
나는 C# 응용 프로그램에서 플러그인 또는 확장 기능을 얻는 단계는 무엇입니까?
지금 시간이 C#을왔다 등 동적으로LoadLibrary
,
GetProcAddress
과 DLL이로드 확장 점과, 년에서 Win32 & C/C++에서 플러그인 아키텍처를 완료했습니다. 해당 단계는 무엇입니까 - 동적으로 어셈블리를로드합니까? 아니면 완전히 다른 스키마입니까?
System.Addin 네임 스페이스의 클래스를 사용할 수 있습니다. 이 설명을 참조하십시오 : AddIn Enabled Applications
또 다른 해결책은 아주 강력한 것 Mono.AddIn을 사용하는 것입니다 : 여기
Choosing between MEF and MAF (System.AddIn) 이 너무 데모입니다.
일반적으로 플러그인을 어디에서 볼 수 있으며 어셈블리를로드하고 특정 클래스를 찾을 수 있습니다. 보통 플러그인은 일종의 플러그인 기본 클래스를 확장하거나 인터페이스를 구현하여 스스로를 광고합니다.
또 다른 옵션은 MEF이며 .NET 4에는 포함되지만 미리보기 릴리스는 현재 .NET 프레임 워크에서 작동합니다.
.Net 응용 프로그램에서는 AppDomain과 AppDomain.CurrentAppDomain을 사용하여 응용 프로그램에 어셈블리를 동적으로로드 할 수 있습니다. 문제는 AppDomain에로드 된 어셈블리를 언로드 할 수 있다는 것입니다.이 문제를 해결할 수있는 해결 방법이 있습니다. 이러한 종류의 어셈블리를 다른 AppDomain에로드하고 어셈블리를 필요로하지 않을 때마다 언로드 할 수 있습니다. 그러나 두 가지 AppDomain에서 두 어셈블리 사이에 개체를 전달하기 때문에이 방법은 매우 복잡합니다.
"... can load ..."대신에 "can * NOT * load"를 의미한다고 생각합니다. –
다른 AppDomain을 언로드 할 수 있다는 것을 의미했습니다. – Beatles1692
쉽지 않은 물건을 전달하고 많은주의를 기울여야합니다. , 약간의 실수를하고 메인 appdomain이 자동으로 어셈블리를로드하게하는 것은 매우 쉽습니다. – jmservera
http://stackoverflow.com/questions/tagged/ioc+c%23 및 http://stackoverflow.com/questions/tagged/plugins+c%23 – jmservera
@jmservera : 해당 링크가 유효하지 않습니다. –
@ 케빈 브록, 그들이 깨진 것을 의미한다면 그 것들을 확인하십시오 : http://stackoverflow.com/questions/tagged?tagnames=ioc%2bc%23&sort=votes http://stackoverflow.com/questions/tagged? tagnames = plugins % 2bc % 23 & sort = votes – jmservera