2009-04-02 4 views
23

나는 지금 막 Managed Extensibility Framework (MEF)의 주위에 나의 머리를 얻고 조금 파기 것을 시도하고있다. 나는 내 머리에서 나는 현재 방정식을 그래서 이클립스 배경이 : 내가 지금까지들은 것을 바탕으로MEF OSGi for .NET입니까?

MEF =~ OSGi for .NET

. 내가 옳은 줄에 있니?

+1

가장 대표하지 않은 답변을 수락했습니다. MEF에 대해 알지 못해도 두 가지를 비교할 수는 없지만 IoC가 OSGi에 전혀 문제가되지 않는다는 사실을 확고히 확인할 수 있습니다. 따라서 IoC는 구별되는 특성으로 사용될 수 없습니다. 그건 그렇고, 당신은 당신의 프로젝트를 위해 무엇을 선택하게 되었습니까? – drozzy

답변

20

Scott Hanselman은 Glenn Block과 함께 podcast 148에서 MEF에 대한 세부 정보를 강조하는 데 도움을주었습니다.

MEF는 OSGi와 비교하여 "Inversion of Control"을 기반으로하며 OSGi은 그렇지 않습니다. OSGi는 라이프 사이클 레이어를 기반으로 다른 메커니즘을 통해 새 번들을 검색합니다.

MEF은 응용 프로그램 확장성에 중점을 둡니다. DI를 다른 확장 기능을 구성하는 전략으로 사용하지만 자체는 일반 DI 컨테이너이 아닙니다. 마지막 포인트는 혼란 스러울 수 있기 때문에

, 팟 캐스트의 transcripts가 도움이 될 수 있습니다

나는 기본적으로,하지만 둘 사이의 차이를 배치하는 방법을, IOC의 컨테이너 관리에 대해 정말이다 a 다른 환경에서 사물 집합으로, 내 디스크 환경에서 로거를 원하는 것처럼, 테스트 환경에서 모의 ​​로거를 원합니다.

그래서 MEF는 을 모르는 것에 대해 알지 못합니다. 그게 뭔지 궁금한 점은 IoC 컨테이너에서 컨벤션 기반 또는 등록, 특정 등록 메커니즘을 사용하는 경향이 있다는 것입니다. 로거 의미, 여기에 이것이 의미하는 바가 있습니다. 그것이 의미하는 바가 있습니다.

MEF는 속성 인 코드 및 검색 메커니즘과 주석을 사용합니다. 시스템에 나타나는 모든 것이 그곳에 있습니다. 당신이 정말로 알 수없는 것들의 집합을 관리하기 위해 MEF를 사용에 대한

그래서 다시 더 높은 수준으로 그것을 복용, 그것은, 당신은 알려진 것들의 집합을 관리하는 IOC의 컨테이너를 사용합니다.

결론 (중 하나)의 주요 차이는 (주기 대 IOC는)은 OSGi가되도록 설계 IOC는 용기가 모듈로의 상단에 형성 될 수 있다는

+0

나는 포드 캐스트가 약간 잘못 인용되었다고 생각한다. "IoC 컨테이너는 실제로 UNKNOWN 세트를 관리하는 것입니다."IoC 컨테이너는 실제로 알려진 것들을 관리하는 것이어야합니다. " –

+0

@Daniel 감사합니다. 결정된. – VonC

+0

MEF는 "Inversion of Control"을 기반으로 제작되었습니다. http://ayende.com/Blog/archive/2008/09/25/the-managed-extensibility-framework.aspx에서는 Managed Extensibility Framework가 IoC 컨테이너가 아니라고 말합니다. – bhadra

5

공지 발견 원칙 실제로 OSGi를위한 여러 가지 IoC 컨테이너와 DS, iPOJO, Blueprint, 그리고 의심 할 여지없이 다른 메커니즘이 있습니다.

+2

순수 IOC 접근 방식의 결함을 해결하기 위해 OSGi 사용에 관한 흥미로운 기사를 찾았습니다. http://www.theserverside.com/feature/OSGi는 모든 모듈러 애플리케이션을위한 프레임 워크입니다. – Jonathan

0

그냥 우연히 만났지만 Prism은 .NET에서 OSGi와 가장 유사한 것으로 보입니다. 문서의 Modular Application Development 섹션을 확인하십시오.

모듈 의존성 예제 (번들과 거의 같습니다!) : 그것은 이상 마이크로 소프트처럼 보인다

<modules> 
    <module assemblyFile="Modules/ModuleD.dll" moduleType="ModuleD.ModuleD, ModuleD" moduleName="ModuleD"> 
    <dependencies> 
     <dependency moduleName="ModuleB"/> 
    </dependencies> 
</module> 

, 무늬 & 사례 팀은은 OSGi 얼라이언스 종류-의 상응하는 역할을한다.