본문 바로가기

Silverlight

MEF

참고한 곳
http://www.silverlight.net/learn/videos/all/using-mef-silverlight-4-extensibility/

MEF(Managed Extensibility Framework) 에 대한 간단한 Sample 비디오가 있어서 따라 해 보다가 간단하게 Sample 만들어서 정리해 봅니다

1) Project(위의 비디오 에서는 Business Application을 만들었지만 그냥 일반 Silverlight Application도 상관 없습니다)을 하나 생성 합니다.

 

2)Project을 하나 더 추가 합니다. 이때는 Silverlight Class Library Template로 만들어 줍니다.
이 프로젝트는 Import/Export 시에 필요한 데이터형을 등록 하기 위한 프로젝트 입니다.
(사실, 컨트롤들을 Type별로 구분할 일이 없으면 필요 없습니다.)

3)이제 컨트롤들을 가지고 있을 Project을 하나 더 추가해 볼까 합니다.

이제 필요한 프로젝트들은 다 추가 했습니다~ :-)

전부 추가 하셨다면 요렇게 나오겠죵?

자자~ 그럼 이제 시작해 보겠습니다.

우선 Extensions Project에 컨트롤들을 몇 개 추가해 보겠습니다. 뾰로롱~

전 MyTextBox 와 MyRectangle 이라는 컨트롤을 2개 추가 했습니다.
머 별 내용은 없구용 그냥 각자 TextBox랑 Rectangle을 하나씩 가지고 있습니다.

그리고 이제 MEF_Extesions에 dll을 추가 할껀데용.
추가할 dll은 다음과 같습니다.

       System.ComponentModel.Composition.dll     

위의 dll이 있는 위치는

요기 입니다. :-)

그럼 이제 MyTextBox가 Export 될 수 있게 만들어 줄까용?

[Export("MyTextBox", typeof(UserControl))]

public partial class MyTextBox : UserControl

{

    public MyTextBox()

    {

        InitializeComponent();

    }

}

 

위의 코드처럼 Export될 이름과 type을 정해 주었습니다.
같은 형식으로 MyRectangle도 해주도록 하겠습니다. :-)
이렇게 해주면 Extensions에 있는 컨트롤들은 Export할 준비가 다 되었습니다.

이제, 이 컨트롤들을 Import해서 사용 하는 방법에 대해서 알아 보도록 하겠습니다.
우선 MEF_Test 클래스에 MEF_Extensions을 참조추가 합니다.

그리고 dll들을 2개 추가 해야 하는데요. 추가 해야 하는 dll들은

        System.ComponentModel.Composition.dll 
       System.ComponentModel.Composition.Initialization.dll

dll들이 있는 위치는 위에서 추가했던 곳과 같은 곳에 있어요.

그리고 MEF_Test 의 MainPage의 코드단 에서 아래와 같이 Import을 합니다.

[Import("MyTextBox", typeof(UserControl))]

public UserControl MyTextBox { get; set; }

 

[Import("MyRectangle", typeof(UserControl))]

public UserControl MyRectangel { get; set; }

 

이렇게 Import 한다고만 알려준다고 해서 바로 Import을 해주는 것은 아니죵~

CompositionInitializer.SatisfyImports(this);

 

CompositionInitializer 의 SatisfyImports을 불러줘야 Import가 됩니다.
위의 SatisfyImports가 불리고 난 이후로는 MyTextBox와 MyRectangle에 Import가 되어 있습니다.

이렇게 Import된 컨트롤들을 layoutRoot에 추가해 보겠습니다.(저는 layoutRoot을 StackPanel로 바꿔 놓았습니다.)

실행화면 따라랑~

여기서는 정말 간단하게 컨트롤을 추가 하는 방법에 대해서 알아 보았는데요.

머 자세한 내용은 아래 싸이트을 한번 보세용 :-)

 http://mef.codeplex.com/wikipage?title=Overview&referringTitle=Home


머 이걸 어떻게,언제 써야 할지는 고민좀 해봐야 겠네용 ㅎㅎ