2010-07-25 3 views
5

내 애플리케이션이 확장 가능해야합니다. 내 자신의 필요에 따라 몇 가지 서비스를 구현했습니다. 이러한 서비스는 IoC/DI 원칙을 기반으로합니다. 따라서 서비스는 애플리케이션 개념을 캡슐화합니다.addin/addon/plugin 전략을 구현하는 모범 사례

예를 들어, IApplicationService가 있습니다. ApplicationService는 현재 실행중인 응용 프로그램에 대한 정보를 표시합니다. AssemblyInfo 등이 지정됩니다. 다른 예는 INavigationService입니다 (샘플의 mef.codeplexcom 참조). 이 서비스는 지정된 현재 선택된 항목에 대한 정보와 일부 이벤트를 제공하는 일부 속성을 제공합니다.

"서비스 접근법"이 가장 쉽고 응용 프로그램의 확장 점을 단순화한다고 생각합니다. 그래서, 이것이 정말로 최선의 접근법인지 확신 할 수 없습니다. 어떻게 생각해? addins/addons/plugins와 같은 응용 프로그램에서 "extensions points"를 구현하는 방법은 무엇입니까?

답장을 보내 주셔서 감사합니다. 그리고 미안 해요, 제 영어는 가난합니다. ;)

답변

4

MEF (Managed Extensibility Framework)에 익숙합니까?

Managed Extensibility Framework (또는 간단히 MEF)는 확장 가능한 응용 프로그램의 생성을 단순화합니다. MEF는 응용 프로그램 확장을로드하는 데 사용할 수있는 검색 및 작성 기능을 제공합니다.

2

MEF (Managed Extensibility Framework)를 심각하게 고려해야합니다.

그것은이다 마이크로 소프트 자체가 예에서 사용하는 큰 새로운 프레임 워크 Visual Studio 2010의 확장 성 이야기 위대하고 사용하기 쉽습니다 - 왜 수천 명의 개발자가 곧 사용할 수있는 것을 사용할 수있을 때 바퀴를 재발 명합니까 ??

0

예, 저는 MEF에 대해 잘 알고 있습니다. 나는 또한 MEF의 개념을 사용하지만 몇 가지 단점이있다. 내 응용 프로그램은 IoC/DI와 비슷하며 MEF와 약간 복잡합니다. MEF는 실제로 DI 컨테이너가 아니므로 다른 DI 컨테이너 (예 : ninject, unity, ...)와 함께 MEF를 사용하면이를 구현하기가 어렵습니다. 다른 DI 컨테이너와 함께 MEF를 사용하지 않을 것입니다. 따라서 MEF를 다른 DI 컨테이너와 혼합하는 것은 실제로 좋지 않습니다.

내 관심사를 이해하시기 바랍니다.

추가 : MEF의 AppDomain에 확장을로드 할 수 없습니다. 그래서 이것은 나의 욕구가 좋지 않기 때문입니다. System.AddIn 또는 MAF는 이것을 지원하지만 System.AddIn을 사용하지 않을 것입니다.

+2

정보를 추가하려면 ** 원래 게시물을 편집하여 ** 업데이트 **하십시오. 자신의 답변을 추가하지 마십시오. 따라하기가 더 어려워집니다. –

+0

예, MEF는 ** 아닙니다 ** a DI 컨테이너 - 그 직업이 DI 컨테이너와 다르기 때문에. 그러나 MEF와 DI 컨테이너 (StructureMap 또는 Unity와 같은)를 섞는 것이 그렇게 어렵지는 않으며 꽤 잘 할 수 있다는 것에 동의하지 않습니다. 당신은 왜 이것이 oyu에서 작동 할 것이라고 생각하지 않는지 더 자세히 설명 할 필요가있을 것입니다 ..... –

+0

AppDomain으로 로딩을 관리하는 것은 그리 쉬운 일이 아니며 대부분의 DI 프레임 워크가 이것을 처리 할 것이라고 생각하지 않습니다. AppDomain 경계를 넘기 위해서는 모든 서비스가 프록시되어야합니다. 이는 앞뒤로 전달되는 모든 클래스가 MarshalByRef 또는 Serializable이어야 함을 의미합니다.제한된 수의 마샬링 된 서비스에만 액세스 할 수있는 '신뢰할 수있는'확장명 (마샬링 없음)과 '신뢰할 수없는'확장명 범주를 고려할 수 있습니다. –