<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title type="text"></title>
      <updated>2010-03-10T17:23:21+09:00</updated>
   <id>http://www.zemna.net/?module=rss&amp;act=atom</id>
   <link rel="alternate" type="text/html" hreflang="ko" href="http://www.zemna.net/"/>
   <link rel="self" type="application/atom+xml" href="http://www.zemna.net/?module=rss&amp;act=atom"/>
   <generator uri="http://www.xpressengine.com/" version="1.4.0.7">XpressEngine</generator>
   <entry>
      <title>Hudson Tutorials - 윈도우에 Hudson 설치하기</title>
      <id>http://www.zemna.net/138088</id>
      <published>2010-01-12T00:46:39+09:00</published>
      <updated>2010-01-12T01:01:38+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/138088"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/138088#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;Hudson은 간단히 얘기하면 빌드, 배포, 테스트 자동화 시스템이다. 어느 하나의 프로젝트의 소스코드를 업데이트 받아 지정된 시간이 프로젝트를 빌드하여 에러 유무를 출력하고, 각 빌드 별 배포파일 관리 및 테스트 통과 여부를 확인할 수 있는 프로그램이다. 또한, Hudson은 오픈소스로, 기존에 많이 사용하던 CruiseControl.NET 보다 손쉬운 환경을 제공하기 때문에 최근 많은 사랑을 받고 있다.&lt;/P&gt;
&lt;P&gt;지금부터 Hudson을 윈도우 운영체제에 설치해보도록 하겠다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263223220436&gt;1. 최신버전의 Hudson을 다운로드 한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_link&quot;&gt;&lt;P&gt;&lt;STRONG&gt;최신버전의 Hudson 다운로드 링크 (마우스 오른쪽으로 클릭하여 다른이름으로 저장하세요)&lt;/STRONG&gt;&lt;A href=&quot;http://hudson-ci.org/latest/hudson.war&quot;&gt;http://hudson-ci.org/latest/hudson.war&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;본 Tutorial에서는 F:\Hudson 폴더에 저장하도록 하겠다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263223400418&gt;2. Java SE Runtime Environment(JRE) 를 설치한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;Hudson은 자바로 구현되어 있으므로, PC에 Java를 설치해야 한다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_link&quot;&gt;&lt;P&gt;&lt;STRONG&gt;Java 다운로드 링크 (쉬프트키를 누르고 클릭하세요)&lt;/STRONG&gt;&lt;A href=&quot;http://java.sun.com/javase/downloads/index.jsp&quot;&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;위 링크로 이동하여 Java SE Runtime Environment를 다운로드 하고 설치하도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263223576198&gt;3. Hudson을 실행한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;자바로 Hudson을 실행하기 위해서는 명령 프롬프트에서 해당 폴더로 이동해야 한다. 아래의 화면에서 처럼 시작-&amp;gt;실행에서 &apos;cmd&apos;를 입력하고 엔터를 친다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138090 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/088/138/Hudson_001.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;명령 프롬프트가 나타나면 아래의 화면과 같이 Hudson을 다운로드한 폴더로 이동하고, Hudson을 실행하도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138092 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/088/138/Hudson_002.png.resized.png&quot; width=600 height=391&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;-DHUDSON_HOME=data 라고 명시하게 되면 Hudson의 Home Directory를 현재 폴더의 하부에 data라는 폴더로 지정하게 된다. 이 옵션을 생략하면 현재 계정폴더 하부에 Home Directory가 생성되게 되므로 주의하자.&lt;/P&gt;
&lt;P&gt;위 명령어를 실행하게 되면 Hudson이 동작중인 문구가 표시되며 실행되게 된다. 그러면 인터넷 익스플로러를 이용하여 Hudson에 접근해 보도록 하자.&lt;/P&gt;
&lt;P&gt;접근 주소는, http://localhost:8080 으로 접근하면 된다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138097 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/088/138/Hudson_003.png.resized.png&quot; width=600 height=331&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;위와 같은 화면이 출력된다면 Hudson이 정상적으로 설치된 것이다. 정말로 쉽다.. ㅋㅋ&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263224301088&gt;4. Hudson을 Windows Service로 동작시키기&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;위에서 Hudson을 실행 한 것 처럼, 맨날 컴퓨터 부팅시 마다 명령 프롬프트에서 명령어를 치고 수행 할 수는 없다. 그래서 Hudson에서는 Windows Service로 수행할 수 있는 기능을 제공한다. Hudson 메인 페이지에서 좌측의 &apos;Hudson 관리&apos; 메뉴로 들어가 보면 &apos;Install as Windows Service&apos; 메뉴가 있는 것을 볼 수 있다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138100 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/088/138/Hudson_004.png.resized.png&quot; width=600 height=560&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;메뉴를 클릭하면 아래의 화면과 같이 설치할 디렉토리를 지정하는 화면이 나타난다. 아까 Hudson 실행 시 지정했던 Home Directory가 표시되는 것을 볼 수 있다. 구지 변경할 필요가 없으므로 &apos;Install&apos; 버튼을 클릭하도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;설치가 끝나게 되면 기존에 명령 프롬프트에서 실행중인 Hudson은 자동으로 종료되고, Windows Service로 등록된 Hudson이 자동으로 시작되면서 Hudson 메인 페이지가 다시 보여지게 된다.&lt;/P&gt;
&lt;P&gt;만일, 설치중에 Access Denied 등의 권한관련 문제가 발생한다면, 현재 운영체제가 UAC(Use Access Control)을 사용하는 운영체제일 가능성이 높다. 그럴경우 기존의 명령 프롬프트에서 실행중인 Hudson은 Ctrl+C를 눌러 그냥 종료시키고, 명령 프롬프트를 이용하여 Hudson이 설치된 폴더 하부에 data 폴더로 이동해 보도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138114 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/088/138/Hudson_006_1.png.resized.png&quot; width=600 height=391&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;data 폴더 하부에 Windows Service 형식의 프로그램인 hudson.exe 파일이 존재하는 것을 확인할 수 있다. 해당 파일을 명령 프롬프트상에서 등록해보도록 하자.&lt;/P&gt;
&lt;P&gt;아래의 화면과 같이 &lt;SPAN style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;STRONG&gt;hudson.exe install &lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12px&quot;&gt;이라고 실행하면 서비스로 등록할 수 있을 것이다.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138122 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/088/138/Hudson_007.png.resized.png&quot; width=600 height=391&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263225515594&gt;마치며,&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;여기까지, 윈도우 운영체제에서 Hudson을 설치해보고 Windows Service 형식으로 설정하는 방법까지 알아보았다. 정말 간편하게 설치가 되는 것 같다. 다음에는 .NET 프로젝트를 위한 플러그인에 대해서 알아보도록 할 것 이다.&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="CI"/>
            <category term="Hudson"/>
            <category term="허드슨"/>
            <category term="빌드"/>
            <category term="자동화"/>
            <category term="빌드자동화"/>
            
   </entry>
   <entry>
      <title>VisualSVN Server를 이용해 손쉽게 SVN 서버 구축하기</title>
      <id>http://www.zemna.net/138059</id>
      <published>2010-01-12T00:12:06+09:00</published>
      <updated>2010-01-12T00:12:06+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/138059"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/138059#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;VisualSVN Server를 이용하면 아파치(Apache) 서버에서 서비스되는 SVN 서버를 손쉽게 구축할 수 있다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263219468700&gt;1. VisualSVN 사이트에서 최신 버전의 VisualSVN Server 프로그램을 다운로드 한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_link&quot;&gt;&lt;P&gt;&lt;STRONG&gt;VisualSVN Server 다운로드 링크&lt;/STRONG&gt;&lt;A href=&quot;http://www.visualsvn.com/server/download/&quot;&gt;http://www.visualsvn.com/server/download/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;쉬프트를 누르고 클릭하면 새창에서 열립니다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138060 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_001.png.resized.png&quot; width=600 height=329&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;위 화면에서 처럼 화면 중앙에 보이는 &apos;download now&apos; 링크를 클릭하면 다운로드가 된다.&lt;/P&gt;
&lt;P&gt;참고로, VisualSVN Server 프로그램에&amp;nbsp;Subversion이 포함되어 있으므로 Subversion은 따로 설치할 필요가 없다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263219831159&gt;2. VisualSVN Server를 설치한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;계속 &apos;Next&apos; 버튼을 누르다 보면 아래와 같이 Component를 선택하는 화면이 나타난다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138062 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_002.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;현재 우리는 VisualSVN Server와 관리 콘솔을 현 PC에 같이 설치 해 보도록 하겠다. 만일 실질적인 VisualSVN Server가 다른 컴퓨터에 설치되어 있고, 현 PC에서는 관리 콘솔만 설치하려 한다면 아래 옵션을 선택하면 된다.&lt;/P&gt;
&lt;P&gt;다시 &apos;Next&apos; 를 클릭하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138063 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_003.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;VisualSVN Server를 설치할 위치를 지정할 수 있다.&lt;/P&gt;
&lt;P&gt;그리고 Repositories 위치를 지정할 수 있다. Repositories는 우리말로 &apos;저장소&apos; 라고 보통 얘기하며, svn으로 관리될 모든 프로젝트의 부모 디렉토리라고 생각하면 된다.&lt;/P&gt;
&lt;P&gt;Server Port는 원하는 포트를 지정하도록 한다. 오른쪽에 &apos;Use secure connection&apos; 항목이 체크되어 있으면 https 를 통해서 svn에 접근하게 되고, 체크를 하지 않으면 http를 통해서 접근할 수 있다.&lt;/P&gt;
&lt;P&gt;Authentication 항목은 2개중 원하는 방식을 선택할 수 있다. &apos;Use Subversion authentication&apos;은 VisualSVN Server에서 사용할 사용자 및 그룹을 따로 만들어서 관리한다는 뜻이고, &apos;Use Windows authentication&apos;은 윈도우 운영체제의 사용자 및 그룹 정보를 그대로 이용한다는 뜻이다. 원하는 옵션을 선택하면 된다.&lt;/P&gt;
&lt;P&gt;이후에는 특별한 내용이 없으므로 계속 &apos;Next&apos;를 눌러 설치를 마치도록 한다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263220470951&gt;3. 설치된 VisualSVN Server를 실행한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;바탕화면 및 프로그램 그룹에 생성된 VisualSVN Server Manager를 실행해 보자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138065 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_004.png.resized.png&quot; width=600 height=453&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;위 그림과 같이 GUI 상에서 간편히 설정할 수 있는 SVN 서버가 구축되었다.&lt;/P&gt;
&lt;P&gt;그러면 이제 샘플로 하나의 프로젝트를 만들어 보자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263220839705&gt;4. 새로운 저장소를 생성한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;화면의 &apos;Repositories&apos; 항목에서 마우스 오른쪽을 클릭하여 &apos;Create New Repository&apos; 항목을 선택한다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138066 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_005.png.resized.png&quot; width=600 height=453&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;메뉴를 클릭하면 아래와 같은 창이 나타난다. Repository Name항목에 생성하려고 하는 저장소명을 입력한다. 여기에선 TestProject라고 입력했다.&lt;/P&gt;
&lt;P&gt;그리고 하단에 보면 &apos;Create default structure (trunk, branches, tags)&apos; 체크박스가 있다. 이 체크박스를 체크하게 되면 최초 저장소 생성시 하부에 trunk, branches, tags 폴더를 자동으로 생성해 준다. 이 하부 폴더들은 일반적으로 많이들 사용하는 저장소 구성이라고 보면 된다. 간단히 설명을 하자면, trunk 폴더는 항상 최신 소스코드가 유지되는곳, branches 폴더는 소스코드에서 특수한 기능이 추가된 특별한 버전이 만들어 질경우 하부에 각각 폴더를 만들어 관리하는 곳, tags 폴더는 소스코드 관리중 원하는 단계의 소스코드를 따로 분리하여 저장해 놓을때 사용한다. 좀 더 자세한 내용은 &lt;A href=&quot;http://www.visualsvn.com/support/svnbook/reposadmin/planning/&quot; target=_blank&gt;여기&lt;/A&gt;를 클릭하여 살펴보도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138067 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_006.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;OK 버튼을 눌러 저장소를 생성하게 되면 아래의 화면과 같이 저장소가 생성되며 기본적인 폴더 구조를 가지고 있는 것을 확인할 수 있다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138068 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_007.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263221552252&gt;5. 저장소에 권한을 부여한다.&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;VisualSVN Server의 기본설정은 Everyone이 Read/Write 할 수 있도록 되어 있다. 소스코드의 보안을 위해 사용자를 설정해보도록 하자.&lt;/P&gt;
&lt;P&gt;Users 항목에서 마우스 오른쪽 버튼을 눌러 &apos;Create User&apos; 메뉴를&amp;nbsp; 선택하도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138071 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_008.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;새로운 계정 하나를 생성하도록 하겠다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138072 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_009.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;이제, 생성한 사용자를 TestProject 저장소에 접근이 가능하도록 설정해 보자. TestProject에서 마우스 오른쪽 버튼을 눌러 &apos;Properties&apos; 메뉴를 클릭하도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138073 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_010.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;아래의 화면과 같이 Security 탭에 현재 Everyone이 Read/Write 할 수 있도록 설정되어 있는 것을 확인할 수 있다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138074 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_011.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;인증된 사용자만 접근이 가능하도록 Everyone은 아래 항목에서 &apos;No Access&apos;로 설정하여 접근하지 못하도록 하고, Add 버튼을 클릭하여 아까 생성한 사용자를 추가하여 Read/Write 권한을 주도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138075 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_012.png&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;이제 모든 설정이 완료되었다. 정상적으로 동작하는지 웹브라우저로 접근해보도록 하겠다.&lt;/P&gt;
&lt;P&gt;인터넷 익스플로러를 실행하여 주소에 &apos;http://localhost:81/svn/TestProject&apos; 를 입력해보자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138076 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_013.png.resized.png&quot; width=600 height=422&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;위 화면과 같이 로그인 정보를 입력하는 화면이 나타난다. 아까 생성한 계정정보를 입력해 보도록 하자.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_138077 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/059/138/VisualSVNServer_014.png.resized.png&quot; width=600 height=422&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;아까 생성한 프로젝트의 구조가 표시되면 정상적으로 설정된 것이다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H5 id=h1263222570601&gt;마치며,&lt;/H5&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;기존에 아파치, Subversion 등등 필요한 여러한 여러 프로그램를 설치 및 구성하는데 애를 먹어본 사람이라면, VisualSVN Server의 간편함에 반하게 될 것 같다. 정말 간편하고 모든것을 관리 할 수 있는 GUI 화면을 제공해주기까지 하니 정말 감사할 따름이다.&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="svn"/>
            <category term="VisualSVN"/>
            <category term="VisualSVN Server"/>
            
   </entry>
   <entry>
      <title>안드로이드폰 프로그램개발을 위한</title>
      <id>http://www.zemna.net/137821</id>
      <published>2010-01-08T09:14:50+09:00</published>
      <updated>2010-01-08T09:14:50+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/137821"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/137821#comment"/>
      <author>
         <name>시체조각</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262909699390&gt;안드로이드(Android) SDK를 다운받자&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;&amp;nbsp;링크 :&amp;nbsp; &lt;A href=&quot;http://developer.android.com/sdk/index.html&quot;&gt;http://developer.android.com/sdk/index.html&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262909764406&gt;개발을 위한 자료를 찾기 위한 사이트네...괜찮은거 같애...&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;사이트 링크: &lt;A href=&quot;http://www.androidpub.com/&quot;&gt;http://www.androidpub.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;참고링크 : &lt;A href=&quot;http://graynote.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-SDK-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EB%B3%B8-%EA%B0%95%EC%A2%8C&quot;&gt;http://graynote.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-SDK-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EB%B3%B8-%EA%B0%95%EC%A2%8C&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Comparing TWO continuous build tools: Cruise Control and Hudson</title>
      <id>http://www.zemna.net/137796</id>
      <published>2010-01-07T20:52:38+09:00</published>
      <updated>2010-01-07T20:52:38+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/137796"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/137796#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;Continuum, Cruise Control and Hudson are some of the famous continuous integration tools which people are using nowadays. Cruise Control is the pioneer one and people are using from a long period of time. Continuum is from the Maven team and very high integration with Maven 1 and 2. Hudson is the new one but it is more popular now. &lt;/P&gt;
&lt;P&gt;In our department my PM asked me and to my friend, to do the &lt;STRONG&gt;Cruise Control + SVN +Maven&lt;/STRONG&gt; based continuous build mechanism. During this process I had gone through some more R&amp;amp;D on the tools which are available for the continuous build process. In that process I found some of the comments about Hudson. Those were very interesting.. So I thought of comparing this with our Cruise control.&lt;/P&gt;
&lt;P&gt;Here in this post I am trying to compare Hudson and Cruise Control. The basic TEN points or features listed below are taken from Hudson’s official site and I am just trying to compare these all with the capabilities of cruise Control. I had tried to add my own experience with these. Correct me if there is any features that were wrongly entered or any new features that you know about these.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Versions and platform&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;Hudson&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;STRONG&gt;1.213&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Cruise Control : &lt;STRONG&gt;2.7.1&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Plat form&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;STRONG&gt;Windows&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;TABLE border=0 cellSpacing=4 cellPadding=2 width=495&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=29&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=top width=193&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://lijinjoseji.files.wordpress.com/2008/05/images.jpg&apos;);&quot; href=&quot;http://lijinjoseji.files.wordpress.com/2008/05/images.jpg&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=0 alt=images src=&quot;http://lijinjoseji.files.wordpress.com/2008/05/images-thumb.jpg&quot; width=68 height=72&gt;&lt;/A&gt; &lt;FONT size=3&gt;Hudson&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://lijinjoseji.files.wordpress.com/2008/05/banner.png&apos;);&quot; href=&quot;http://lijinjoseji.files.wordpress.com/2008/05/banner.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=0 alt=banner src=&quot;http://lijinjoseji.files.wordpress.com/2008/05/banner-thumb.png&quot; width=171 height=42 modo=&quot;false&quot;&gt;&lt;/A&gt; &lt;FONT size=3&gt;Cruise Control&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;1&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;STRONG&gt;Open Source&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;&lt;STRONG&gt;Open Source&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;2&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;Easy installation&lt;/B&gt;: Just java -jar Hudson.war, or deploy it in a servlet container. No additional install, no database. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;2.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;It also gives us very easy installation. Just unzip the downloaded zip file. That’s it. It is actually using an internal Jetty server. No Database, no install here also.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;3&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;Easy configuration&lt;/B&gt;: Hudson can be configured entirely from its friendly web GUI with extensive on-the-fly error checks and inline help. There’s no need to tweak XML manually anymore, although if you’d like to do so, you can do that, too. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;3.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Big difference comes here. The GUI providing by Cruise control for configuration is not at all good. It just displays the config.xml file. &lt;IMG class=wp-smiley alt=:( src=&quot;http://minddiary.com/wp-includes/images/smilies/icon_sad.gif&quot;&gt; Its no way near to Hudson for Configuration GUI part. If you want to configure Cruise Control then you must study about the structure of the Config.xml first.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;4&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;Change set support&lt;/B&gt;: Hudson can generate a list of changes made into the build from CVS/Subversion. This is also done in a fairly efficient fashion, to reduce the load of the repository. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;4.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Cruise control also show the list of files which are changes at this check-in process.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;5&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;Permanent links&lt;/B&gt;: Hudson gives you clean readable URLs for most of its pages, including some permanent links link “latest build”/”latest successful build”, so that they can be easily linked from elsewhere. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;5.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Uhm… Cruise control is not giving this. It gives a link with some log code number attached with it. Its looking horrible and cant be easily likable.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;6&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;RSS/E-mail/IM Integration&lt;/B&gt;: Monitor build results by RSS or e-mail to get real-time notifications on failures. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;6.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;It also gives RSS and email functionality. Don’t know about IM support. If we need to change the Email structure then either we have to change XSL or CSS file which we are using&amp;nbsp; in the email config.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;7&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;After-the-fact tagging&lt;/B&gt;: Builds can be tagged long after builds are completed &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;7.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;N.A.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;8&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;Detect &lt;STRONG&gt;new &lt;/STRONG&gt;failing tests while build&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Failing tests will show in the dashboard. But no separation between new and old.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;9&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;Notify when first test in build fails&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;No such type of notification.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;10&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;JUnit/TestNG test reporting&lt;/B&gt;: JUnit test reports can be tabulated, summarized, and displayed with history information, such as when it started breaking, etc. History trend is plotted into a graph. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;10&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;It is showing all the unit test results but not as good as Hudson does. There is no detailed information like when it started breaking, History etc. and no graph for unit results too.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;11&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;Distributed builds&lt;/B&gt;: Hudson can distribute build/test loads to multiple computers. This lets you get the most out of those idle workstations sitting beneath developers’ desks. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;11.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;The build distribution is done through the maven install goal. Its&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;12&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;File fingerprinting&lt;/B&gt;: Hudson can keep track of which build produced which jars, and which build is using which version of jars, and so on. This works even for jars that are produced outside Hudson, and is ideal for projects to track dependency. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;12.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;No idea. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;13&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;B&gt;Plugin Support&lt;/B&gt;: Hudson can be extended via &lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://hudson.gotdns.com/wiki/display/HUDSON/Plugins&apos;);&quot; href=&quot;http://hudson.gotdns.com/wiki/display/HUDSON/Plugins&quot;&gt;3rd party plug-ins&lt;/A&gt;. You can write plug-ins to make Hudson support tools/processes that your team uses. &lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;13.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Plug-ins are there in Cruise control also. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;14&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;STRONG&gt;Dash board: &lt;/STRONG&gt;Hudson has an attractive dashboard with Colorful as well as meaningful icons. We can separate this building projects into subgroups also. It will also shows building projects. Well designed Ajax pages.&lt;/TD&gt;
&lt;TD vAlign=top width=&quot;&lt;br &gt;&lt;/TD&gt;&amp;#10;33&quot;&gt;
&lt;P align=right&gt;14.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;It gives an attractive Dash board. It displays all the necessary information which we need to know. We can directly build from there also. Viewing/ downloading the log file is also allowed from this Interface.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;15&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;STRONG&gt;Local Copy of projects:&lt;/STRONG&gt; Handled by Hudson itself. No need to do by the user.&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;15.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Maintaining a local copy with the exact SVN data makes us more uncomfortable. The user has to copy the Project into the local folder with SVN data.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;16&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;STRONG&gt;Auto copy of SVN updates:&lt;/STRONG&gt; No need to provide any other code to copy the project from SVN to the local compiling folder.&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;16.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Its not copying the data from the SVN directly. We need to write (In our case we wrote an ANT build file to download the latest copy of Project from SVN) something separate.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;17&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;&lt;STRONG&gt;Running In background: &lt;/STRONG&gt;If the server where we deployed the war is running then its okay for Hudson.&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;17.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;If we want to run it without console then we need to make it a separate ‘WINDOWS Service’ using any third party tool.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;18&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;We can deploy the war file in any of the server we wanted.&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;18.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;Jetty server is using internally.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;19&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;User authorization schemes. more configurable.&lt;/TD&gt;
&lt;TD vAlign=top width=33&gt;
&lt;P align=right&gt;19.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=218&gt;User authentication is there but no schemes at all.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=30&gt;20&lt;/TD&gt;
&lt;TD vAlign=top width=192&gt;Very Active mailing list.&lt;/TD&gt;
&lt;TD vAlign=top width=34&gt;
&lt;P align=right&gt;20.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=219&gt;From a long period people are using this. So it gives so many search results. But its mailing list is not that much active when compared with Hudson.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Alternative building tools available&lt;/FONT&gt;&lt;/STRONG&gt;. &lt;/H4&gt;
&lt;P&gt;I got this list from &lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Home&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Home&quot; target=_blank modo=&quot;false&quot;&gt;ThoughtWorks&lt;/A&gt;. &lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix&quot; target=_blank modo=&quot;false&quot;&gt;HERE&lt;/A&gt; we will get a good comparison of these all.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/AnthillPro&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/AnthillPro&quot;&gt;AnthillPro&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Bamboo&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Bamboo&quot;&gt;Bamboo&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Borland+Gauntlet&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Borland+Gauntlet&quot;&gt;Borland Gauntlet&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix&quot;&gt;CI Feature Matrix&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Continuum&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Continuum&quot;&gt;Continuum&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Hudson&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Hudson&quot;&gt;Hudson&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Parabuild&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Parabuild&quot;&gt;Parabuild&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Pulse&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Pulse&quot;&gt;Pulse&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/QuickBuild&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/QuickBuild&quot;&gt;QuickBuild&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/Rubber+Chicken+Build&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/Rubber+Chicken+Build&quot;&gt;Rubber Chicken Build&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://confluence.public.thoughtworks.org/display/CC/TeamCity&apos;);&quot; href=&quot;http://confluence.public.thoughtworks.org/display/CC/TeamCity&quot;&gt;TeamCity&lt;/A&gt; 
&lt;LI&gt;&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://luntbuild.javaforge.com/&apos;);&quot; href=&quot;http://luntbuild.javaforge.com/&quot; target=_blank&gt;Luntbuild&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In my opinion Hudson much more better than Cruise Control. The time we will take to start to use Cruise control will be high when we compared with Hudson. The GUI which makes all the Configurations very very easy. The Ajax support makes the configuration more “Error Free”. Though Cruise control is using by a lot of people, when we looked into the features, mailing list, the fastness and support from Developers I think Hudson will be a good option.&lt;/P&gt;
&lt;P&gt;Related links : &lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://lijinjoseji.wordpress.com/2008/05/10/continuous-integration-with-hudson-a-presentation-and-an-interview-podcast/&apos;);&quot; href=&quot;http://lijinjoseji.wordpress.com/2008/05/10/continuous-integration-with-hudson-a-presentation-and-an-interview-podcast/&quot; modo=&quot;false&quot;&gt;Continuous Integration with Hudson: A Presentation and an Interview podcast&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px&quot; id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f747c196-34bb-46ee-b8b4-b5b23718c47a class=wlWriterSmartContent&gt;del.icio.us Tags: &lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://del.icio.us/popular/Cruise%20Control&apos;);&quot; href=&quot;http://del.icio.us/popular/Cruise%20Control&quot; rel=tag modo=&quot;false&quot;&gt;Cruise Control&lt;/A&gt;,&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://del.icio.us/popular/Hudson&apos;);&quot; href=&quot;http://del.icio.us/popular/Hudson&quot; rel=tag&gt;Hudson&lt;/A&gt;,&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://del.icio.us/popular/Continous%20Integration&apos;);&quot; href=&quot;http://del.icio.us/popular/Continous%20Integration&quot; rel=tag&gt;Continous Integration&lt;/A&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px&quot; id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:426aaea0-5bdf-4164-89fe-c3047fc268bb class=wlWriterSmartContent&gt;Technorati Tags: &lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://technorati.com/tags/Cruise%20Control&apos;);&quot; href=&quot;http://technorati.com/tags/Cruise%20Control&quot; rel=tag modo=&quot;false&quot;&gt;Cruise Control&lt;/A&gt;,&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://technorati.com/tags/Hudson&apos;);&quot; href=&quot;http://technorati.com/tags/Hudson&quot; rel=tag modo=&quot;false&quot;&gt;Hudson&lt;/A&gt;,&lt;A onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://technorati.com/tags/Continous%20Integration&apos;);&quot; href=&quot;http://technorati.com/tags/Continous%20Integration&quot; rel=tag&gt;Continous Integration&lt;/A&gt;&lt;/DIV&gt;
&lt;P class=akpc_pop&gt;Popularity: 100% &lt;SPAN class=akpc_help&gt;[&lt;A title=&quot;What does this mean?&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/http://alexking.org/projects/wordpress/popularity-contest&apos;);&quot; href=&quot;http://alexking.org/projects/wordpress/popularity-contest&quot; modo=&quot;false&quot;&gt;?&lt;/A&gt;]&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Related posts: 
&lt;OL&gt;
&lt;LI&gt;&lt;A title=&quot;Permanent Link: Creating Web services using Apache CXF (Part 1) : The Basics.&quot; href=&quot;http://minddiary.com/2009/06/10/creating-web-services-using-apache-cxf-part-1-the-basics/&quot; rel=bookmark&gt;Creating Web services using Apache CXF (Part 1) : The Basics.&lt;/A&gt; &lt;SMALL&gt;&lt;FONT size=2&gt;As we discussed in the previous post, CXF is...&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A title=&quot;Permanent Link: Apache CXF- An ultimate web service open source framework : Lets start learning…&quot; href=&quot;http://minddiary.com/2009/06/10/apache-cxf-an-ultimate-web-service-open-source-framework-lets-start-learning/&quot; rel=bookmark&gt;Apache CXF- An ultimate web service open source framework : Lets start learning…&lt;/A&gt; &lt;SMALL&gt;&lt;FONT size=2&gt;Apache CXF is an open source services framework which...&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Related posts brought to you by &lt;A href=&quot;http://mitcho.com/code/yarpp/&quot; modo=&quot;false&quot;&gt;Yet Another Related Posts Plugin&lt;/A&gt;.&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="CruiseControl"/>
            <category term="Hudson"/>
            
   </entry>
   <entry>
      <title>IIS에서 WCF호스팅하기</title>
      <id>http://www.zemna.net/137579</id>
      <published>2010-01-06T20:34:56+09:00</published>
      <updated>2010-03-01T01:02:05+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/137579"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/137579#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761632531&gt;1. WCF 서비스 라이브러리 프로젝트를 생성한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761668093&gt;2. 텍스트 형식의 프로젝트명.svc 파일을 만들어 정의한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761695703&gt;3. Web.config 파일에 서비스를 정의한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761737531&gt;4. 인터넷 정보 서비스를 실행하고, 웹사이트에 가상 디렉토리를 추가한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761806281&gt;5. Windows Console Application 프로젝트를 생성한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761826218&gt;6. System.ServiceModel 라이브러리를 참조한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761866421&gt;7. 서비스 참조 추가에서 WCF 서비스를 선택하여 추가한다.&lt;/H4&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H4 id=h1262761891390&gt;8. 클라이언트에 생성된 프록시를 사용한다.&lt;/H4&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>다국어 프로그래밍의 기초지식</title>
      <id>http://www.zemna.net/137478</id>
      <published>2010-01-06T00:00:22+09:00</published>
      <updated>2010-01-06T09:10:16+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/137478"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/137478#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;출처 : 마이크로소프트웨어&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_img&quot;&gt;&lt;P&gt;&lt;IMG class=xe_file_srl_137493 alt=&quot;&quot; src=&quot;http://www.zemna.net/files/attach/images/140481/478/137/language-translation_250x250_1.jpg&quot;&gt; &lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H3 id=h1262702420430&gt;i18N&lt;/H3&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;i18N은 국제화(internationalization)를 줄여서 쓴 말이다. i와 n 사이에 18개의 알파벳이 있다는 뜻에서 붙여진 이름이다. 즉, 이미 만들어진 프로그램을 다른 언어를 사용하는 사용자가 사용할 수 있도록 변경하는 과정을 말한다. 즉, 시스템에서 기본적으로 사용하는 언어의 문자들을 자유롭게 사용할 수 있어야 한다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H3 id=h1262702720123&gt;문자 집합&lt;/H3&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;각 나라의 언어들은 그 말을 표현하기 위한 문자들을 가지고 있습니다. 이를 컴퓨터 상에서 나타내기 위해 필요한 것이 문자 집합(character set)이다. 예를 들자면 한글을 표현하기 위해서는 KSC-5601 완성형을 사용할 수도 있으며, 조합형을 사용할 수도 있다. 이와 같이 하나의 언어에도 여러 가지의 문자 집합이 존재할 수 있다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H3 id=h1262702815506&gt;코드 페이지&lt;/H3&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;코드 페이지(code page)는 쉽게 말하면 문자나 특수 문자를 숫자로 표현한 대조표 같은 것이다. 1바이트 코드 페이지는 8비트를 사용하여 기본적으로 256개의 문자를 가지고 있다. 첫 128개는 표준 ASCII 문자들로 구성되어 있으며 이 속에 기본적인 영어의 알파벳 문자들이 들어 있다. 나머지 128개의 공간에는 각 언어별로 특별히 사용되는 문자들이 들어 있다. 물론 우리나라나 중국, 일본, 대반 등의 2바이트 코드 페이지를 사용하는 국가는 이런 1바이트 코드 페이지로는 표현할 수 없는 문자들이 너무 많다.&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_hx&quot;&gt;&lt;H3 id=h1262702951778&gt;유니코드&lt;/H3&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;컴퓨터는 기본적으로 숫자만 처리한다. 글자나 다른 문자에도 숫자를 지정하여 저장한다. 유니코드가 개발되기 전에는 이러한 숫자를 지정하기 위해 수백 가지의 다른 기호화 시스템을 사용했다. 단일 기호화 방법으로는 모든 문자를 포함할 수 없었기 때문이다. 예를 들어 유럽 연합에서만 보더라도 모든 각 나라별 언어를 처리하려면 여러 개의 다른 기호화 방법이 필요하다. 영어와 같은 단일 언어의 경우도 공통적으로 사용되는 모든 글자, 문장 부호 및 테크니컬 기호에 맞는 단일 기호화 방법을 가지고 있지 못했다.&lt;/P&gt;
&lt;P&gt;이러한 기호화 시스템은 또한 다른 기호화 시스템과 충돌한다. 즉, 두 가지 기호화 방법이 두 개의 다른 문자에 대해 같은 번호를 사용하거나 같은 문자에 대해 다른 번호를 사용할 수 있다. 주어진 모든 컴퓨터(특히 서버)는 서로 다른 여러 가지 기호화 방법을 지원해야 한다. 그러나, 데이터를 서로 다른 기호화 방법이나 플랫폼 간에 전달할 때마다 그 데이터는 항상 손상의 위험을 겪게 된다.&lt;/P&gt;
&lt;P&gt;유니코드는 사용 중인 플랫폼, 프로그램, 언어에 관계없이 문자마다 고유한 숫자를 제공한다.&amp;nbsp; 유니코드 표준은 Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 및 기타 여러 회사와 같은 업계 선두주자에 의해 채택되었다. 유니코드는 XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML 등과 같이 현재 널리 사용되는 표준에서 필요하며 이는 ISO/IEC 10646을 구현하는 공식적인 방법이다. 이는 많은 운영 체제, 요즘 사용되는 모든 브라우저 및 기타 많은 제품에서 지원된다. 유니코드 표준의 부상과 이를 지원하는 도구의 가용성은 최근 및 전 세계에 불고 있는 기술 경향에서 가장 중요한 부분을 차지하고 있다.&lt;/P&gt;
&lt;P&gt;유니코드를 클라이언트-서버 또는 다중-연결 응용 프로그램과 웹 사이트에 통합하면 레거시 문자 셋트 사용에 있어서 상당한 비용 절감 효과가 나타난다. 유니코드를 통해 리엔지니어링 없이 다중 플랫폼, 언어 및 국가 같에 단일 소프트웨어 플랫폼 또는 단일 웹 사이트를 목표로 삼을 수 있다. 이를 사용하면 데이터를 손상없이 여러 시스템을 통해 전송할 수 있다.&lt;/P&gt;
&lt;P&gt;유니코드 컨소시엄은 비영리 조직으로서 현대 소프트웨어 제품과 표준에서 텍스트의 표현을 지정하는 유니코드 표준의 사용을 개발하고 확장하며 장려하기 위해 세워졌다. 컨소시엄 멤버십은 컴퓨터와 정보 처리 산업에 종사하고 있는 광범위한 회사 및 조직의 범위를 나타낸다. 컨소시엄의 재정은 전적으로 회비에 의해 충당된다. 유니코드 컨소시업에서의 멤버십은 전 세계 어느 곳에서나 유니코드 표준을 지원하고 그 확장과 구현을 지원하고자 하는 조직과 개인에게 개방되어 있다.&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="다국어"/>
            
   </entry>
   <entry>
      <title>Gemini Key Features</title>
      <id>http://www.zemna.net/137012</id>
      <published>2009-12-30T23:32:03+09:00</published>
      <updated>2009-12-30T23:33:56+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/137012"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/137012#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_list&quot;&gt;&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;ASP.NET web application&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;SQL Server database back-end&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Time-tracking and fully interactive web-based Project Gantt&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Source control integration&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Configurable email alert templates&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Custom fields support&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Gemini event sub system– event/listener model&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Gemini Web Services&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Automatic project road map and change logs&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Customisable issue workflow&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;RSS feed support&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Customisable issue type and priority&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Controlled anonymous user access&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Issue linking across projects&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Unicode support&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Windows and web forms authentication&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Optional add-on products: Desktop Client, Visual Studio Add-in, Time Tracker&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="Gemini"/>
            
   </entry>
   <entry>
      <title>Gemini 시작하기</title>
      <id>http://www.zemna.net/137000</id>
      <published>2009-12-30T23:04:40+09:00</published>
      <updated>2009-12-30T23:04:40+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/137000"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/137000#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;어제 회식하던 중, 이슈 트래킹(Issue Tracking) 툴의 필요성이 다시 대두되었다. 기존에 Trac을 도입하려고 시도했으나, 이번에 새로오신 과장님의 소개로 Gemini라는 툴에 대해 알게 되었다. 처음 들어본 이슈 트래킹 툴이였으나 설치가 간편하고 웹 페이지도 Trac에 비해 화려하게 나오는게 아주 마음에 든다.. ㅋㅋ&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_link&quot;&gt;&lt;P&gt;&lt;STRONG&gt;CounterSoft Homepage&lt;/STRONG&gt;&lt;A href=&quot;http://www.countersoft.com/&quot;&gt;http://www.countersoft.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Gemini Software 제작사 홈페이지&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;Gemini는 프로젝트를 관리할때 팀이나 기관에서 효율적인 대화 및 협업을 위한 프로젝트 관리 및 이슈 트래킹, 버그 트래킹 기능을 지원한다. 그리고 5유저까지는 무료라이센스를 받아서 사용이 가능하다는 장점이 있다.&lt;/P&gt;
&lt;P&gt;또한, 여러상황에서 편리한 사용이 가능하도록 여러가지 애드온을 제공한다.&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="Gemini"/>
            <category term="Issue"/>
            <category term="Tracker"/>
            <category term="Tracking"/>
            <category term="이슈"/>
            <category term="트래커"/>
            <category term="트래킹"/>
            
   </entry>
   <entry>
      <title>C# 설계에 참고사항</title>
      <id>http://www.zemna.net/136668</id>
      <published>2009-12-29T11:39:50+09:00</published>
      <updated>2009-12-29T11:39:50+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/136668"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/136668#comment"/>
      <author>
         <name>시체조각</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_list&quot;&gt;&lt;UL style=&quot;LIST-STYLE-TYPE: decimal&quot;&gt;
&lt;LI&gt;&lt;SPAN&gt;상속보다는 interface를 정의하고 구현하자.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;interface의 구현과 virtual 메서드의 overriding을 구분하자.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;delegate를 이용하여 콜백을 표현하자.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;이벤트를 이용하여 외부로 노출할 인터페이스를 정의하자.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;클래스 내부 객체에 대한 reference 반환을 피하자.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;명력적 프로그래밍보다 선언적 프로그래밍이 더 좋데요.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;serializable 타입이 더 좋다네.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;IComparable과 IComparer를 이용하여 순차관계만들자.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>WPF 소개</title>
      <id>http://www.zemna.net/136917</id>
      <published>2009-12-29T11:39:30+09:00</published>
      <updated>2009-12-29T11:39:30+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/136917"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/136917#comment"/>
      <author>
         <name>시체조각</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;WPF를 바로 보는 나의 가장 인상적 특징은 UI를 GDI/GDI+가 아닌 DirectX로 그린다는 점이다.&lt;/P&gt;
&lt;P&gt;책에 소개된 WPF의 인상적인 특징은(나는 아직 못느껴 봄 ㅋㅋ)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_list&quot;&gt;&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;웹과 유사한 레이아웃 모델&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;풍부한 드로잉 모델&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;풍부한 텍스트 모델&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;최상의 프로그래밍 개념으로서의 애니메이션&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;오디오 미디어와 비디오 미디어 지원&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;스타일과 템플릿&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;명령&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;선언 형식의 사용자 인터페이스&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;페이지 기반의 응용 프로그램&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;이상이다.ㅋㅋ&lt;/P&gt;
&lt;P&gt;앞으로 공부하다가 참고 할만한 내용은 정리해놔야겠군 ㅋㅋ&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Open Source Charting &amp; Reporting Tools in C#</title>
      <id>http://www.zemna.net/136899</id>
      <published>2009-12-29T09:21:23+09:00</published>
      <updated>2009-12-29T09:21:23+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/136899"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/136899#comment"/>
      <author>
         <name>zemna</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;C# 환경에서 개발 시 무료로 사용할 수 있는 차트 &amp;amp; 레포팅 툴들을 정리해 놓은 사이트이다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://csharp-source.net/open-source/charting-and-reporting&quot; target=_blank&gt;페이지로 이동&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="차트"/>
            <category term="Chart"/>
            <category term="레포팅"/>
            <category term="Reporting"/>
            <category term="Report"/>
            <category term="C#"/>
            <category term="CSharp"/>
            
   </entry>
   <entry>
      <title>Pro WPF in C# 2008 구입</title>
      <id>http://www.zemna.net/136645</id>
      <published>2009-12-23T15:30:12+09:00</published>
      <updated>2009-12-23T18:35:36+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/136645"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/136645#comment"/>
      <author>
         <name>시체조각</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;WPF공부를 좀 해볼까하는 찰나에..이 책을 보게 되넹..ㅋㅋ&lt;/P&gt;
&lt;P&gt;나온지도 얼마되지 않은 따끈한 책이구먼..ㅋㅋ&lt;/P&gt;
&lt;P&gt;오면 열심히 함봐야겠다.&lt;/P&gt;
&lt;P&gt;예스24에서 오전에 출발했다니 이제 곧 오겠징 ㅋㅋ&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>확장 메서드의 활용</title>
      <id>http://www.zemna.net/136630</id>
      <published>2009-12-23T11:44:54+09:00</published>
      <updated>2009-12-23T11:44:54+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/136630"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/136630#comment"/>
      <author>
         <name>시체조각</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_list&quot;&gt;&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;기존형식(클래스or 구조체)에 Static 메서드를 추가하여 기능을 확장할수 있다.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;확장 메서드는 Static 클래스에서 정의하며, this 키워드와 함께 메서드의 첫번째 파라미터에 사용하는 형식으로 지정&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;Static class Util&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;{&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static int Negate(this int i)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 1&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Batang&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Full-Screen Application</title>
      <id>http://www.zemna.net/134795</id>
      <published>2009-12-02T12:59:55+09:00</published>
      <updated>2009-12-02T13:04:27+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/134795"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/134795#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;&lt;A href=&quot;http://digitalformula.net/development/c-full-screen-application-complete-application-example/&quot;&gt;http://digitalformula.net/development/c-full-screen-application-complete-application-example/&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;출처 : &lt;A href=&quot;http://digitalformula.net/development/c-full-screen-application-complete-application-example/&quot; target=_blank&gt;http://digitalformula.net/development/c-full-screen-application-complete-application-example/&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;P&gt;Yesterday I posted a quick update to an article I wrote back in 2007 entitled &lt;A href=&quot;http://digitalformula.net/net-geekery/how-to-make-a-full-screen-windows-app-using-vbnet/&quot; target=_blank&gt;How to make a full-screen Windows app using VB.NET&lt;/A&gt;. Aside from 1 or 2 people saying “Oh man why don’t you be a man and write it using C#?” I reckon it’s a good idea to do that anyway. Thanks Scott for the suggestion. &lt;IMG class=wp-smiley alt=;) src=&quot;http://digitalformula.net/wp-includes/images/smilies/icon_wink.gif&quot;&gt; And thanks &lt;A href=&quot;http://www.philsversion.com/&quot; target=_blank&gt;Phil&lt;/A&gt; for pointing me in the right direction with the DLL import stuff. &lt;IMG class=wp-smiley alt=:) src=&quot;http://digitalformula.net/wp-includes/images/smilies/icon_smile.gif&quot;&gt; &lt;SPAN id=more-662&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;So, without any mucking about here’s the exact same complete application example only this time in C#. You can download the application’s source on the &lt;A href=&quot;http://digitalformula.net/downloads/&quot;&gt;Digital Formula Downloads&lt;/A&gt; page or, alternatively, from the &lt;A href=&quot;http://digitalformula.net/download/df_fullscreen_demo_cs.zip&quot;&gt;application source’s direct link&lt;/A&gt;. For those that want to see the main form’s complete source before they download, it can be found at the end of this article.&lt;/P&gt;
&lt;P&gt;Please feel to ask any questions necessary. Thanks!&lt;/P&gt;
&lt;P&gt;Form1’s complete source:&lt;/P&gt;
&lt;DIV class=wp_codebox_msgheader&gt;
&lt;DIV class=codebox_clear&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV class=wp_codebox&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR id=p6621&gt;
&lt;TD class=line_numbers&gt;&lt;PRE&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
&lt;/PRE&gt;&lt;/TD&gt;
&lt;TD id=p662code1 class=code&gt;&lt;PRE style=&quot;FONT-FAMILY: monospace&quot; class=csharp&gt;&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Collections.Generic&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.ComponentModel&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Data&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Drawing&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Linq&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Text&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Windows.Forms&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;using&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008080&quot;&gt;System.Runtime.InteropServices&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&amp;nbsp;
&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;namespace&lt;/SPAN&gt; Play
&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
    &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;partial&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;class&lt;/SPAN&gt; Form1 &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;:&lt;/SPAN&gt; Form
    &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;public&lt;/SPAN&gt; Form1&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            InitializeComponent&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;[&lt;/SPAN&gt;DllImport &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #666666&quot;&gt;&quot;user32.dll&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;]&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;static&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;extern&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;bool&lt;/SPAN&gt; SetWindowPos&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;IntPtr hWnd, IntPtr hWndIntertAfter, &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; X, &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; Y, &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; cx, &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; cy, &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; uFlags&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;[&lt;/SPAN&gt;DllImport&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #666666&quot;&gt;&quot;user32.dll&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;]&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;static&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;extern&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; GetSystemMetrics&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; Which&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;const&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; SM_CXSCREEN &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;0&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;const&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; SM_CYSCREEN &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;1&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; IntPtr HWND_TOP &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; IntPtr.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;Zero&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;const&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; SWP_SHOWWINDOW &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;64&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; ScreenX
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            get
            &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
                &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;return&lt;/SPAN&gt; GetSystemMetrics&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;SM_CXSCREEN&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;int&lt;/SPAN&gt; ScreenY
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            get
            &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
                &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;return&lt;/SPAN&gt; GetSystemMetrics&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;SM_CYSCREEN&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;void&lt;/SPAN&gt; FullScreen&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;WindowState&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; FormWindowState.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;Maximized&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;FormBorderStyle&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; FormBorderStyle.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;None&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;TopMost&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; true&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            SetWindowPos&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;Handle&lt;/SPAN&gt;, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;void&lt;/SPAN&gt; Restore&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;WindowState&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; FormWindowState.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;Normal&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;FormBorderStyle&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; FormBorderStyle.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;SizableToolWindow&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;this&lt;/SPAN&gt;.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;TopMost&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #008000&quot;&gt;=&lt;/SPAN&gt; false&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;void&lt;/SPAN&gt; button1_Click&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;object&lt;/SPAN&gt; sender, EventArgs e&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            FullScreen&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;void&lt;/SPAN&gt; cmdRestore_Click&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;object&lt;/SPAN&gt; sender, EventArgs e&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            Restore&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&amp;nbsp;
        &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0600ff&quot;&gt;void&lt;/SPAN&gt; cmdExit_Click&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #ff0000&quot;&gt;object&lt;/SPAN&gt; sender, EventArgs e&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&lt;/SPAN&gt;
            Application.&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;Exit&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;)&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;;&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
    &lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;
&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="C#"/>
            <category term="풀스크린"/>
            <category term="Full-Screen"/>
            <category term="Full"/>
            <category term="Screen"/>
            
   </entry>
   <entry>
      <title>Overloading Methods in WCF</title>
      <id>http://www.zemna.net/134155</id>
      <published>2009-10-12T11:04:50+09:00</published>
      <updated>2009-10-12T11:04:50+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/134155"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/134155#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: normal; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Post :&amp;nbsp;&lt;a href=&quot;http://jeffbarnes.net/blog/post/2006/09/20/Overloading-Methods-in-WCF.aspx&quot;&gt;http://jeffbarnes.net/blog/post/2006/09/20/Overloading-Methods-in-WCF.aspx&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Yesterday, I attended a local MSDN event in the Birmingham area.&amp;nbsp; It covered the .NET 2.0 System.Net namespace, an introduction to WCF, and a look at Atlas.&amp;nbsp; During the course of the WCF overview, someone asked the presenter whether it was possible to overload a method in WCF.&amp;nbsp; The presenter wasn&apos;t completely sure and there were mixed answers from people in the audience.&amp;nbsp; So, I thought I would provide&amp;nbsp;the correct answer.&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;The short answer is yes.&amp;nbsp; Technically, it is possible to overload a method in WCF.&amp;nbsp; However, when you want to expose overloaded methods as operations in a WCF contract, there is more to it than simply writing&amp;nbsp;two or more methods with the same name.&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Consider the following example:&lt;/p&gt;&lt;pre class=&quot;coloredcode&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;[&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ServiceContract&lt;/span&gt;]
&lt;span class=&quot;kwd&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwd&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ICalendarService&lt;/span&gt;
{
   [&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;OperationContract&lt;/span&gt;]
   &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ScheduledEvent&lt;/span&gt;[] GetScheduledEvents(&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;DateTime&lt;/span&gt; date);

   [&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;OperationContract&lt;/span&gt;]
   &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ScheduledEvent&lt;/span&gt;[] GetScheduledEvents(&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;DateTime&lt;/span&gt; start, &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;DateTime&lt;/span&gt; end);
}&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Now, try to actually implement this interface and host it as a WCF service.&amp;nbsp; Kaboom!&amp;nbsp; An InvalidOperationException will be raised when you invoke ServiceHost.Open.&amp;nbsp; Jeff, I thought you said that methods could be overloaded in WCF.&amp;nbsp; What gives?&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;As far as the C# compiler is concerned, this is a completely legal piece of code.&amp;nbsp; The interface contains two methods.&amp;nbsp; The methods have the same name, but their signatures are unique since their parameters differ.&amp;nbsp; The interface and methods are decorated with attributes.&amp;nbsp; However, WCF doesn&apos;t have any special hooks into the compiler.&amp;nbsp; Consequently, the compiler&amp;nbsp;doesn&apos;t have any special knowledge about the attributes.&amp;nbsp; It is simply going to emit their information in the assembly metadata.&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;When WCF attempts to start the service, it essentially&amp;nbsp;interrogates the metadata to generate a WSDL contract.&amp;nbsp; WSDL is all about technology neutral, message based communication.&amp;nbsp; It doesn&apos;t&amp;nbsp;support object-oriented concepts such as inheritance and overloading.&amp;nbsp; (Actually, I&amp;nbsp;&lt;em style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;strong style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;think&lt;/strong&gt;&lt;/em&gt;&amp;nbsp;the earliest versions of&amp;nbsp;WSDL allowed overloading to a certain extent, but it has since been removed in the newer versions.)&amp;nbsp;&amp;nbsp;So,&amp;nbsp;WCF basically detects there are two methods with the same name and&amp;nbsp;raises an exception to indicate this isn&apos;t allowed even though the code compiled without any errors.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Regardless, WCF still provides the ability to overload methods.&amp;nbsp; This can be achieved by using the name property of the OperationContract attribute.&amp;nbsp; By default, the name of the method will be used for the value of the name property.&amp;nbsp; However, you can explicitly set the value of the name property to provide a unique value.&amp;nbsp; Under the covers, WCF will use the value you supply as the name of the corresponding operation in the generated WSDL.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Here is our previous example revised to use alias method names:&lt;/p&gt;&lt;pre class=&quot;coloredcode&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;[&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ServiceContract&lt;/span&gt;]
&lt;span class=&quot;kwd&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwd&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ICalendarService&lt;/span&gt;
{
   [&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;OperationContract&lt;/span&gt;(Name = &lt;span class=&quot;st&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&quot;GetScheduledEventsByDate&quot;&lt;/span&gt;)]
   &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ScheduledEvent&lt;/span&gt;[] GetScheduledEvents(&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;DateTime&lt;/span&gt; date);

   [&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;OperationContract&lt;/span&gt;(Name = &lt;span class=&quot;st&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&quot;GetScheduledEventsByDateRange&quot;&lt;/span&gt;)]
   &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;ScheduledEvent&lt;/span&gt;[] GetScheduledEvents(&lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;DateTime&lt;/span&gt; start, &lt;span class=&quot;typ&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;DateTime&lt;/span&gt; end);
}&lt;/pre&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;You may be wondering how the method will appear to the consumer of the service.&amp;nbsp; Will it appear as two different names (based on the the alias) or as overloaded methods with the same name?&amp;nbsp; This will depend upon the proxy class used by your client.&amp;nbsp; If you use the proxy class that is automatically generated by svcutility.exe, the alias method names will be used.&amp;nbsp; However, you can manually edit the generated proxy class to achieve the appearance of overloaded methods on the client as well.&amp;nbsp; This can be accomplished by applying the same attributes to the methods defined in the interface that is used by the proxy class.&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;As you can see, overloading of methods is possible in WCF.&amp;nbsp; However, there is another question that remains to be answered.&amp;nbsp; Just because you have the ability to overload methods exposed in the contract, should you do it?&amp;nbsp; There are a lot of varied opinions about this type of question.&amp;nbsp; It is hard to say whether any of them are definitively right or wrong.&amp;nbsp; Personally, I am in the camp that you should avoid it unless there is a compelling reason.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;Don&apos;t get me wrong.&amp;nbsp; There is absolutely nothing wrong with method overloading in the realm of object oriented programming.&amp;nbsp; However, object oriented development doesn&apos;t translate directly to service oriented development.&amp;nbsp; I don&apos;t think it is generally a good idea to expose overloaded methods as part of a service contract.&amp;nbsp; It is a specific object-oriented concept that doesn&apos;t really fit into the semantics of service orientation.&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 0px; padding-bottom: 3px; padding-left: 0px; &quot;&gt;At any rate, to answer the question of the person at the MSDN event...yes, it is possible to overload methods exposed as operation contracts in WCF.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Hosting multiple WCF services under a single windows service</title>
      <id>http://www.zemna.net/134120</id>
      <published>2009-10-07T16:06:20+09:00</published>
      <updated>2009-10-07T16:06:36+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/134120"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/134120#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;div&gt;using System;&lt;/div&gt;&lt;div&gt;using System.Collections.Generic;&lt;/div&gt;&lt;div&gt;using System.ServiceModel;&lt;/div&gt;&lt;div&gt;using System.ServiceProcess;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;namespace Server&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public partial class Service1 : ServiceBase&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Service1()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InitializeComponent();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private readonly ServiceManager serviceManager = new ServiceManager();&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected override void OnStart(string[] args)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base.OnStart(args);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serviceManager.OpenAll();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected override void OnStop()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serviceManager.CloseAll();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base.OnStop();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public class ServiceManager&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;readonly List&amp;lt;ServiceHost&amp;gt; serviceHosts = new List&amp;lt;ServiceHost&amp;gt;();&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void OpenAll()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OpenHost&amp;lt;Service1&amp;gt;();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OpenHost&amp;lt;Service2&amp;gt;();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OpenHost&amp;lt;Service3&amp;gt;();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void CloseAll()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;foreach (ServiceHost serviceHost in serviceHosts)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serviceHost.Close();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private void OpenHost&amp;lt;T&amp;gt;()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Type type = typeof(T);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ServiceHost serviceHost = new ServiceHost(type);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serviceHost.Open();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serviceHosts.Add(serviceHost);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Managed Extensibility Framework : Overview</title>
      <id>http://www.zemna.net/133752</id>
      <published>2009-07-28T16:56:47+09:00</published>
      <updated>2009-07-28T16:56:47+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133752"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133752#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;a href=&quot;http://channel9.msdn.com/pdc2008/TL33/&quot; target=&quot;_blank&quot;&gt;http://channel9.msdn.com/pdc2008/TL33/&lt;/a&gt;&lt;/div&gt;</content>
                  <category term=".NET Framework"/>
            <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Managed Extensibility Framework</title>
      <id>http://www.zemna.net/133742</id>
      <published>2009-07-28T16:49:47+09:00</published>
      <updated>2009-07-28T16:50:34+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133742"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133742#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;출처 : &lt;a href=&quot;http://blogs.msdn.com/kcwalina/archive/2008/04/25/MEF.aspx&quot; target=&quot;_blank&quot;&gt;http://blogs.msdn.com/kcwalina/archive/2008/04/25/MEF.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Several months ago we formed what we call Application Framework Core team. The charter of the team is to play the same role in the application frameworks space (WinForms, ASP.NET, WPF, Silverlight) as the Base Class Libraries (BCL) team plays at the bottom of the platform stack. &lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The BCL team did a good job fulfilling the role of the team responsible for decreasing duplication and providing common abstractions for the low levels of the platform. Unfortunately, we did not have a similar team really focused on these sets of issues higher up on the stack. This resulted in some unfortunate duplication (like several data binding models for each of the application models, different dependency property system for WPF and WF) and lack of common abstractions (what undo APIs should my generic application plugin call?) for application model code. The Application Framework Core team is now in place to start addressing the problems.&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;One of the first concrete projects that we are working on and are ready to slowly talk about is what we call the &lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;Managed Extensibility Framework&lt;/b&gt; (MEF). We observed that there are more and more places in the .NET Framework itself and increasingly managed applications (like Visual Studio) where we want to provide, or already provide, hooks for 3&lt;sup&gt;rd&lt;/sup&gt; party extensions. Think about TraceListener plugins for the TraceSource APIs, pluggable rules for Visual Studio Code Analysis (and the standalone FxCop), etc. In the absence of a built-in extensibility framework (like MEF), our developers who want to enable such extensions often are forced to create custom mechanisms, thus duplication. We hope that MEF will both stop such duplication and encourage/enable more extensibility in the Framework and applications built on top of it. &lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;We will blog more details about MEF in the upcoming months, but here are some early details (subject to changes, of course): MEF is a set of features referred in the academic community and in the industry as a &lt;i style=&quot;mso-bidi-font-style: normal&quot;&gt;Naming and Activation Service&lt;/i&gt; (returns an object given a “name”), &lt;i style=&quot;mso-bidi-font-style: normal&quot;&gt;Dependency Injection&lt;/i&gt; (DI) framework, and a &lt;i style=&quot;mso-bidi-font-style: normal&quot;&gt;Structural Type System&lt;/i&gt; (duck typing). These technologies (and other like System.AddIn) together are intended to enable the world of what we call &lt;i style=&quot;mso-bidi-font-style: normal&quot;&gt;Open and Dynamic Applications&lt;/i&gt;, i.e. make it easier and cheaper to build extensible applications and extensions.&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;The work we are doing builds on several existing Microsoft technologies (like the &lt;/font&gt;&lt;a href=&quot;http://www.codeplex.com/unity/&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Unity&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; framework) and with feedback from the DI community. The relationship with the Unity team is the regular relationship between the P&amp;amp;P group and the .NET Framework group where we trickle successful technologies and ideas from the P&amp;amp;P team into the .NET Framework after they have passed the test of time. We have done this with some features in the diagnostics, exceptions, and UI space in the past. The direct engagement with the DI community is also starting. We gave a talk on the technology at last week’s MVP Summit, and&amp;nbsp;talked with &lt;/font&gt;&lt;a href=&quot;http://codebetter.com/blogs/jeremy.miller/&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Jeremy Miller&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; (the owner of Structure Map) and &lt;/font&gt;&lt;a href=&quot;http://www.ayende.com/Blog/&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Ayende Rahien&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt; (Rhino Mocks) . We got lots of great feedback from Jeremy and Ayende&amp;nbsp;and I think their experience in the DI space and their feedback will be invaluable as the project evolves. Thanks guys! We are of course also looking forward to engaging others in the DI community.&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;And finally here is some code showing basic scenarios our framework supports:&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Creating an Extension Point in an Application:&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 6pt 0in 0pt 0.25in&quot; class=&quot;CodeCxSpFirst&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;public class HelloWorld {&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;/span&gt;&lt;span style=&quot;BACKGROUND: yellow; mso-highlight: yellow&quot;&gt;[Import]&lt;/span&gt; // import declares what a component needs&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;/span&gt;public OutputDevice Output;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&amp;nbsp; &lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public void SayIt() {&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Output.WriteLine(&quot;Hello World&quot;);&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;/span&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;o:p&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;// Extension Contract &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;public abstract class OutputDevice {&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/span&gt;void WriteLine(string output)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 6pt 0.25in&quot; class=&quot;CodeCxSpLast&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo1; mso-add-space: auto&quot; class=&quot;MsoListParagraph&quot;&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;span style=&quot;mso-list: Ignore&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;1.&lt;/font&gt;&lt;span style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Creating an Extension&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 6pt 0in 0pt 0.25in&quot; class=&quot;CodeCxSpFirst&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;BACKGROUND: yellow; mso-highlight: yellow&quot;&gt;[Export(typeof(OutputDevice))]&lt;/span&gt; // export declared what a component gives&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;public class CustomOutput : OutputDevice {&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/span&gt;public void WriteLine(string output) {&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Console.WriteLine(output);&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 6pt 0.25in&quot; class=&quot;CodeCxSpLast&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt -0.25in&quot; class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo1; mso-add-space: auto&quot; class=&quot;MsoListParagraph&quot;&gt;&lt;span style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;span style=&quot;mso-list: Ignore&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;2.&lt;/font&gt;&lt;span style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;Magic that makes composes (DIs) the application with the extensions.&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 6pt 0in 0pt 0.25in&quot; class=&quot;CodeCxSpFirst&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;var domain = new ComponentDomain();&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;var hello = new HelloWorld();&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;o:p&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;// of course this can be implicit&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;domain.AddComponent(hello); &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;domain.AddComponent(new CustomOutput());&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;o:p&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 0pt 0.25in&quot; class=&quot;CodeCxSpMiddle&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;&lt;span style=&quot;BACKGROUND: yellow; mso-highlight: yellow&quot;&gt;domain.Bind();&lt;/span&gt; // bind matches the needs to gives&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 6pt 0.25in&quot; class=&quot;CodeCxSpLast&quot;&gt;&lt;strong&gt;&lt;font face=&quot;Lucida Console&quot;&gt;hello.SayIt();&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;font face=&quot;Calibri&quot;&gt;Expecting lots of questions, I will preemptively answer (&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-char-type: symbol; mso-symbol-font-family: Wingdings; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings&quot;&gt;J&lt;/span&gt;&lt;/span&gt;&lt;font face=&quot;Calibri&quot;&gt;): we don’t yet know whether or when we will ship this. We do have working code and we are looking into releasing a preview/CTP of the technology. For now we would be very interested in high level feedback. What do you think hinders extensibility in frameworks and application? Where would you like the Framework to be more extensible? What DI framework features you need, like, want, and use on daily basis? i.e. is constructor injection required? &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0in 0in 10pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;And lastly, we are &lt;/font&gt;&lt;a href=&quot;http://blogs.msdn.com/kcwalina/archive/2008/03/14/8209671.aspx&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;hiring&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot; face=&quot;Calibri&quot;&gt;! :-)&lt;/font&gt;&lt;/p&gt;
&lt;div class=&quot;entryviewfooter&quot;&gt;Published 25 April 08 09:45 by &lt;a id=&quot;ctl00___ctl00___ctl01___Entry___AuthorLink&quot; href=&quot;http://blogs.msdn.com/user/Profile.aspx?UserID=3414&quot;&gt;kcwalina&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;</content>
                  <category term=".NET Framework"/>
            <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Simple Introduction to Extensible Applications with the Managed Extensions Framework</title>
      <id>http://www.zemna.net/133727</id>
      <published>2009-07-28T16:38:08+09:00</published>
      <updated>2009-07-28T16:52:54+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133727"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133727#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;출처 : &lt;/span&gt;&lt;a href=&quot;http://blogs.msdn.com/brada/archive/2008/09/29/simple-introduction-to-composite-applications-with-the-managed-extensions-framework.aspx&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;http://blogs.msdn.com/brada/archive/2008/09/29/simple-introduction-to-composite-applications-with-the-managed-extensions-framework.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;
&lt;p&gt;Recently my team has been working on the &lt;a href=&quot;http://www.codeplex.com/MEF&quot; mce_href=&quot;http://www.codeplex.com/MEF&quot;&gt;Managed Extensions Framework&lt;/a&gt; (MEF)... I have gotten a chance to explain the concept to folks and I think I have discovered a way to talk about MEF that folks can easily get.&amp;nbsp; So I thought I&apos;d spend a little time walking through a *very* simple MEF example as a way to introduce folks to the power of extensible applications in general, and MEF in particular.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;BTW, you can download the &lt;a href=&quot;http://www.codeplex.com/MEF&quot; mce_href=&quot;http://www.codeplex.com/MEF&quot;&gt;current MEF CTP&lt;/a&gt;&amp;nbsp; and the &lt;a href=&quot;http://brad_abrams.members.winisp.net/Projects/MEFSimpleSample/MEFDemoForBlog.zip&quot; mce_href=&quot;http://brad_abrams.members.winisp.net/Projects/MEFSimpleSample/MEFDemoForBlog.zip&quot;&gt;final working sample&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;Background &lt;/h2&gt;
&lt;p&gt;Let&apos;s start with the most simple example: Hello World!&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;         Console.WriteLine(&lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;         Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;         Program p = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; Program();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;         p.Run();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now, you might now always want to print the same string, so let&apos;s refactor slightly to pull the string out..&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; Message { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     Console.WriteLine(Message);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This looks nice, now we need to add the message... well, the actual text is a separate concern, as such it should be in a different class.&amp;nbsp;&amp;nbsp;&amp;nbsp; Such as:&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; SimpleHello &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; Message&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;         get&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;             &lt;span style=&quot;COLOR: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;hello world!!&quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now we simply need wire these up:&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     SimpleHello hello = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; SimpleHello();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     Message = hello.Message;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     Console.WriteLine(Message);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This works, but something looks odd about line 3 and 4... We have introduced tight coupling back.. What we really want to do is externalize lines 3 and 4, so they can be controlled without effecting the rest of the logic of the program.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;Enter MEF&lt;/h2&gt;
&lt;p&gt;Add a Reference to the System.ComponentModel.Composition.dll assembly found in the bin directory of the MEF zip.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Add &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/span&gt; System.ComponentModel.Composition;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now in the Program class, we need to import a value for Message -- that is, we want to specify that someone outside of this program needs to supply a message.&amp;nbsp; Then we need to remove our tight coupling.&amp;nbsp;&amp;nbsp;&amp;nbsp; Note in line 4-5 and we saying we want to import the value for Message.&amp;nbsp; Here I am showing doing it by type (string).. because basic types such as strings might be pretty common, consider using a named import such as [Import(&quot;Message&quot;)] &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; Message { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;        &lt;span style=&quot;COLOR: #008000&quot;&gt;// SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;         &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;         Console.WriteLine(Message);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;         Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now in the SimpleHello class we need to export the Message property.&amp;nbsp; This tells the system it can be used to satisfy requirements.&amp;nbsp;&amp;nbsp;&amp;nbsp; Notice line 3 and 4 and am marking it with an Export attribute..&amp;nbsp; Again, this exports it by type (string in this case).&amp;nbsp; As with above, you might want to do it with an explicit name for a more real world example [Export(&quot;Message&quot;)]&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; SimpleHello &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     [Export]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; Message&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;         get&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;             &lt;span style=&quot;COLOR: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;hello world!!&quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now we need to tell MEF to wire these up for us.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     &lt;span style=&quot;COLOR: #008000&quot;&gt;//SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;     container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;     Console.WriteLine(Message);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;     Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In line 5, we create a catalog -- that tells MEF where to look for imports and exports.&amp;nbsp; In this case, we are saying the currently running assembly.&amp;nbsp; There are tons of different parts catalogs, we will look at some later and you can of course build your own.&lt;/p&gt;
&lt;p&gt;in line 6, we create a Composition container-- this is effectively the soup that all the different parts will be wired up together.&lt;/p&gt;
&lt;p&gt;In line 7, we add this instance of Program to the container so that its dependencies get wired up.&lt;/p&gt;
&lt;p&gt;In line 8, we do the compose magic.&amp;nbsp; this is where the Message property of Program gets set.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Notice, in this case the wire up is done by matching types (String to String)... clearly that isn&apos;t always the right way, we will look at other ways to wire up later.&lt;/p&gt;
&lt;p&gt;Run it and you get the expected output of &quot;hello world!&quot;.&lt;/p&gt;
&lt;p&gt;Now let&apos;s add another message, just to be a little more fun...&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; MoreMessages&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     [Export]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; FunMessage&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;         get&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;             &lt;span style=&quot;COLOR: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;This is getting fun!&quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now run.. It blows up!&amp;nbsp; Why?&amp;nbsp; Well, let&apos;s look at the exception:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;System.ComponentModel.Composition.CompositionException&amp;nbsp; Error : Multiple exports were found that match the constraint &apos;(composableItem.ContractName = \&quot;System.String\&quot;)&apos;. The import for this contract requires a single export only.&quot;&lt;/font&gt; &lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;From the error it looks like we provided too many ways to satisfy the Import... MEF didn&apos;t know which one to pick.&amp;nbsp; Of course you can programmatically get in there and help, you can also just remove the export from one of the messages... but more fun, you can actually tell MEF you are able to deal with zero or more results.&amp;nbsp; Change the Message property of Program as follows:&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt; Messages { get; set; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Notice we changed the return type to be a collection of strings rather than just one string. &lt;/p&gt;
&lt;p&gt;Now change the usage code slightly and we get:&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt; Messages { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;         &lt;span style=&quot;COLOR: #008000&quot;&gt;//SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;         &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;         var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;         var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;         container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;         container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  16:&lt;/span&gt;         &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var s &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; Messages)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  17:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  18:&lt;/span&gt;             Console.WriteLine(s);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  19:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  20:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  21:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  22:&lt;/span&gt;         Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  23:&lt;/span&gt;     }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_4.png&quot; mce_href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_4.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_1.png&quot; width=&quot;506&quot; height=&quot;207&quot; mce_src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_1.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Wow -- we get both messages!&amp;nbsp; Pretty cool...&lt;/p&gt;
&lt;h3&gt;More Value of MEF&lt;/h3&gt;
&lt;p&gt;Ok, I think we can all agree that we added a little complexity if all we were going to do is factor what was in the same assembly. MEF really shines when you have separate independent groups working on different components.&amp;nbsp; By definition these are often in different assemblies with cross no dependencies.&amp;nbsp; To show how MEF supports this, let&apos;s add a new Class Library project to our solution.&amp;nbsp;&amp;nbsp;&amp;nbsp; Call it ExternalMessages and add a reference to the System.ComponentModel.Composition.dll assembly.&lt;/p&gt;
&lt;p&gt;Add the following class.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/span&gt; System.ComponentModel.Composition;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Class1&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     [Export]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; Message&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;         get&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;             &lt;span style=&quot;COLOR: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;I am starting to get it...&quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now we need to wire up this class into the catalog...&amp;nbsp;&amp;nbsp;&amp;nbsp; Notice in line 6, we change the catalog to look in a directory for the parts...&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt;  {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;      &lt;span style=&quot;COLOR: #008000&quot;&gt;//SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;      &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;      var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExternalMessages\bin\Debug&quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;          &lt;span style=&quot;COLOR: #008000&quot;&gt;// new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;      var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;      container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;      container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;      &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var s &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; Messages)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;      {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;          Console.WriteLine(s);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;      }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  16:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  17:&lt;/span&gt;      Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  18:&lt;/span&gt;  }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Note: DirectoryPartCatalog also supports relative paths that will look for a path under the current AppDomain.CurrentDomain.BaseDirectory.&amp;nbsp; For example: &lt;br  /&gt;&lt;font face=&quot;Courier New&quot;&gt;new DirectoryPartCatalog(@”.\extensions\”);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Run it and we get our new message!&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Cool, but we lost our old messages, and I kind of liked them too...&amp;nbsp; Well, luckily, we have an aggregate part catalog that can take parts from several sources.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt;  {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;      &lt;span style=&quot;COLOR: #008000&quot;&gt;//SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;      &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;      var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AggregatingComposablePartCatalog();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;         catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExternalMessages\bin\Debug&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;         catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly()));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;      var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;      container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;      container.Compose();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Pretty cool, we now get all the messages!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_6.png&quot; mce_href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_6.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_2.png&quot; width=&quot;435&quot; height=&quot;189&quot; mce_src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_2.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Finally, just to bring up the point here... I created a bunch of different assemblies that exported Messages... All I need to do is point the catalog at them and go.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_8.png&quot; mce_href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_8.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_3.png&quot; width=&quot;565&quot; height=&quot;224&quot; mce_src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_3.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     &lt;span style=&quot;COLOR: #008000&quot;&gt;//SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AggregatingComposablePartCatalog();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;        catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExternalMessages\bin\Debug&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;        catalog.Catalogs.Add(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExtraMessages&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;        catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly()));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;     container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;See where I added them in line 7..&amp;nbsp;&amp;nbsp;&amp;nbsp; Now just copy the assemblies into this directory and they become available for this program to use! Notice how I don&apos;t need to change any of the logic of the core program as I add more and more extensions.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_10.png&quot; mce_href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_10.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_4.png&quot; width=&quot;664&quot; height=&quot;189&quot; mce_src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_4.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Taking MEF to the Next Level&lt;/h2&gt;
&lt;p&gt;Above I showed the simplest scenario... let&apos;s get a bit more powerful.&amp;nbsp; If you pick apart the main program looking for tight coupling, that Console.WriteLine() will really stand out.. What if you want to log to a file, call a web service or print to HTML or WPF?&amp;nbsp;&amp;nbsp; Tightly coupling to the Console does not make that easy.&amp;nbsp; How can we use the seperation of concerns principle and MEF to get rid of this tight coupling?&amp;nbsp; &lt;/p&gt;
&lt;p&gt;First, we need to define an interface that describes the contract for outputting strings.&amp;nbsp; To ensure correct dependency management go ahead and create a new Library project called SharedLibrary, add this interface and reference this project from each of the other team projects.&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;namespace&lt;/span&gt; SharedLibrary&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;interface&lt;/span&gt; IOutputString&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;         &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; OutputStringToConsole(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;value&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now, back in the main program we can factor out the Console.WriteLine ()... &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt; Messages { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IOutputString Out { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;         &lt;span style=&quot;COLOR: #008000&quot;&gt;//SimpleHello hello = new SimpleHello();&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;         &lt;span style=&quot;COLOR: #008000&quot;&gt;//Message = hello.Message;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;         var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AggregatingComposablePartCatalog();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;            catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExternalMessages\bin\Debug&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/span&gt;            catalog.Catalogs.Add(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExtraMessages&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  16:&lt;/span&gt;            catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly()));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  17:&lt;/span&gt;         var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  18:&lt;/span&gt;         container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  19:&lt;/span&gt;         container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  20:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  21:&lt;/span&gt;         &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var s &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; Messages)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  22:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  23:&lt;/span&gt;             Out.OutputString(s);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  24:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  25:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  26:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  27:&lt;/span&gt;         Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  28:&lt;/span&gt;     }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In line 6-7 we define Out and in line 23 we change from Console.WriteLine() to Out.OutputString().&lt;/p&gt;
&lt;p&gt;Now in External Messages project add the following class&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; [Export(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;typeof&lt;/span&gt;(IOutputString))]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Class1 : IOutputString&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; OutputString(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;value&lt;/span&gt;)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;         Console.WriteLine(&lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;Output=&quot;&lt;/span&gt; + &lt;span style=&quot;COLOR: #0000ff&quot;&gt;value&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Notice here we are explicitly saying the expert type to be that shared interface.&amp;nbsp; Now when we run it we get:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_12.png&quot; mce_href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_12.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_5.png&quot; width=&quot;582&quot; height=&quot;159&quot; mce_src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_5.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;To make things more interesting, lets add another implementation of IOutputString that is a bit more creative.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; [Export(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;typeof&lt;/span&gt;(IOutputString))]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; ReverseOutputter : IOutputString&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; OutputString(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;value&lt;/span&gt;)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;         &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var s &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;value&lt;/span&gt;.Split().Reverse())&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;             Console.ForegroundColor = (ConsoleColor)(s.Length % 10);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;             Console.Write(s + &lt;span style=&quot;COLOR: #006080&quot;&gt;&quot; &quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;         Console.WriteLine();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Just running this now would give us an error right, because we told MEF we wanted exactly one IOutputString... if we change our code to work with multiple we get more fun!&amp;nbsp; In line 7 we changed to request a set of IOutputStrings and in line 19 we changed to loop through all the output devices.&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt; Messages { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;IOutputString&amp;gt; OutputSet { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;         var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AggregatingComposablePartCatalog();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;            catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExternalMessages\bin\Debug&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;            catalog.Catalogs.Add(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExtraMessages&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;            catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly()));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/span&gt;         var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  16:&lt;/span&gt;         container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  17:&lt;/span&gt;         container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  18:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  19:&lt;/span&gt;         &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var Out &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; OutputSet)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  20:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  21:&lt;/span&gt;             &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var s &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; Messages)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  22:&lt;/span&gt;             {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  23:&lt;/span&gt;                 Out.OutputString(s);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  24:&lt;/span&gt;             }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  25:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  26:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  27:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  28:&lt;/span&gt;         Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  29:&lt;/span&gt;     }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now when we run it we get all our messages in all our outputs..&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_14.png&quot; mce_href=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_14.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_6.png&quot; width=&quot;552&quot; height=&quot;232&quot; mce_src=&quot;http://blogs.msdn.com/blogfiles/brada/WindowsLiveWriter/SimpleIntroductiontoCompositeApplication_D56F/image_thumb_6.png&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now the only real logic in our main is the nested foreach loops.&amp;nbsp; We may very well like to change that in the future as well... so let&apos;s see if we can abstract that out using exactly the same techniques we have talked about already.&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt; Messages { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;     [Import]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;IOutputString&amp;gt; OutputSet { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;     [Import(&lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;OutputMessages&quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; Action&amp;lt;IEnumerable&amp;lt;IOutputString&amp;gt;, IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt;&amp;gt; OutputMessages { get; set; }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; Run()&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/span&gt;         var catalog = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AggregatingComposablePartCatalog();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/span&gt;            catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExternalMessages\bin\Debug&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  16:&lt;/span&gt;            catalog.Catalogs.Add(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; DirectoryPartCatalog(&lt;span style=&quot;COLOR: #006080&quot;&gt;@&quot;..\..\..\ExtraMessages&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  17:&lt;/span&gt;            catalog.Catalogs.Add (&lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly()));&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  18:&lt;/span&gt;         var container = &lt;span style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/span&gt; CompositionContainer(catalog.CreateResolver());&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  19:&lt;/span&gt;         container.AddPart(&lt;span style=&quot;COLOR: #0000ff&quot;&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  20:&lt;/span&gt;         container.Compose();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  21:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  23:&lt;/span&gt;         OutputMessages(OutputSet, Messages); &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  24:&lt;/span&gt;         &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  25:&lt;/span&gt;     }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;First, in line 9-10 we define an Action that can do the output... and in line 23 we remove our nested foreach loops and replace it with a call to this method.&amp;nbsp; Now all we have in our Main is effectively wiring up components.&amp;nbsp; Very loosely coupled!&lt;/p&gt;
&lt;p&gt;Now let&apos;s add an option for how the messages are outputted.&amp;nbsp;&amp;nbsp; It would be very easy to define a config file option for selecting these and returning the correct one.&amp;nbsp; Notice that MEF knows that this method follows the contract of the Action delegate above, so it does all the wireup for us.&amp;nbsp; &lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/span&gt; [Export(&lt;span style=&quot;COLOR: #006080&quot;&gt;&quot;OutputMessages&quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/span&gt; OutputByMessage(IEnumerable&amp;lt;IOutputString&amp;gt; outputSet, IEnumerable&amp;lt;&lt;span style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/span&gt;&amp;gt; messages)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/span&gt;     &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var s &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; messages)&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/span&gt;         &lt;span style=&quot;COLOR: #0000ff&quot;&gt;foreach&lt;/span&gt; (var Out &lt;span style=&quot;COLOR: #0000ff&quot;&gt;in&lt;/span&gt; outputSet)   &lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/span&gt;             Out.OutputString(s);&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/span&gt;     Console.ReadKey();&lt;/pre&gt;&lt;pre style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, &apos;Courier New&apos;, courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;span style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I would love to hear what you think?&amp;nbsp; Can you think of usage for MEF in your applications?&amp;nbsp;&amp;nbsp;&amp;nbsp; I&apos;d also love for you to grab the final sample and see how many different ways you can extend it..&amp;nbsp; Here is the &lt;a href=&quot;http://brad_abrams.members.winisp.net/Projects/MEFSimpleSample/MEFDemoForBlog.zip&quot; mce_href=&quot;http://brad_abrams.members.winisp.net/Projects/MEFSimpleSample/MEFDemoForBlog.zip&quot;&gt;final working sample&lt;/a&gt;.&amp;nbsp; Enjoy!&lt;/p&gt;
&lt;div class=&quot;entryviewfooter&quot;&gt;Published 29 September 08 08:21 by &lt;a id=&quot;ctl00___ctl00___ctl01___Entry___AuthorLink&quot; href=&quot;http://blogs.msdn.com/user/Profile.aspx?UserID=2910&quot;&gt;BradA&lt;/a&gt; &lt;/div&gt;&lt;/span&gt;&lt;/div&gt;</content>
                  <category term=".NET Framework"/>
            <category term="MEF"/>
            
   </entry>
   <entry>
      <title>MEF Preview 6 공개</title>
      <id>http://www.zemna.net/133655</id>
      <published>2009-07-26T17:54:45+09:00</published>
      <updated>2009-07-26T17:54:45+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133655"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133655#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;출처 : &lt;a href=&quot;http://vsts2010.net/101&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/101&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;MEF(Managed Extensibility Framework) 이 2009년 7월 13일에 릴리즈되어 14일에 공개가 되었습니다. 특히 MEF 는 .NET Framework 4.0 에 포함이 되어있으며, CodePlex 에서 굉장히 빠른 속도로 발전하고 있는 프레임워크 중에 하나 입니다.&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;CodePlex MEF 사이트에 등록된 릴리즈 노트 입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/1917B0284A62E12713E49E&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: 굴림; FONT-SIZE: 12pt&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;그 중에서 몇 가지만 살펴보도록 하겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 13pt&quot;&gt;&lt;strong&gt;실버라이트 3 지원 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;특히 이번에 눈여겨 볼 만한 것이 Silverlight 3 를 지원하는 것입니다. 이미 Preview 5 이전의 MEF 에서는 실버라이트를 지원하기 위해 코드에서 전처리 명령 구문을 사용하여 프레임워크 실버라이트가 지원되긴 했습니다. 그것을 기반으로 이번 Preview 6 버전에서는 실버라이트 3 용 솔루션이 제공됩니다. 이 솔루션을 통해 실버라이트용 MEF 프레임워크를 빌드 하시면 됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 13pt&quot;&gt;&lt;strong&gt;ExportAttribute 의 seal 키워드 제거 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;이번 MEF Preview 6 에서 ExportAttribute 의 seal 키워드가 제거됩니다. 이 전 Preview 5 에서는 ExportAttribute 을 절대 상속할 수 없는 구조였기 때문에 독자적인 Export 를 제공할 수 없었기, Metadata 를 ExportAttribute 와 같은 기능울 개별적으로 지정해야 하는 등의 Export 기능의 확장에 불합리한 구조로 되어있었습니다. 하지만 이번 Preview 6 버전에서는 ExportAttribute 클래스의 seal 키워드가 제거 됨으로써 ExportAttribute 의 확장이 용이하게 되었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 13pt&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 13pt&quot;&gt;&lt;strong&gt;ImportMany 로 통일된 컬렉션 처리 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;이제 모든 컬렉션은 ImportMany 로 통일되었습니다. Preview 5 에서는 ExportCollection&amp;lt;T&amp;gt; 또는 IEnumerable&amp;lt;T&amp;gt; 와 같이 사용하기도 까다롭고 이것으로 반환된 객체를 처리하기에도 편리한 구조는 아니였습니다. Preview 5 에서도 ImportMany 의 기능이 존재하였지만, 이번 Preview 6 는 이것으로 모든 컬렉션 처리를 하도록 통일되었다는게 혼란스러웠던 부분을 간소화할 수 있을 것 같습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;기타 그 밖에도 구조적으로 보다 안정되었고, 메서드나 클래스의 네이밍이 변경되었고, 예외 시에 Composition 동작의 분석을 추적하기 쉽도록 덤프(Dump) 를 뜰 수 있는 로깅 기능 등 다양한 기능이 추가되었습니다. 정식 버전의 MEF 는 어떤 모습으로 나올지 정말 기대가 됩니다. 더 자세한 내용은 아래의 링크를 통해 더 쉽게 설명이 되어있으니 참고 하십시오. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-LEFT: 1pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕&quot;&gt;&lt;br  /&gt;&lt;font face=&quot;굴림&quot;&gt;참고문헌&lt;br  /&gt;&lt;/font&gt;&lt;strong&gt;MEF Preview 6 Available&lt;/strong&gt;&lt;font size=&quot;3&quot;&gt;&lt;br  /&gt;&lt;/font&gt;&lt;/span&gt;&lt;a href=&quot;http://blogs.msdn.com/nblumhardt/archive/2009/07/09/mef-preview-6-available.aspx&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt;&lt;font color=&quot;#666666&quot;&gt;http://blogs.msdn.com/nblumhardt/archive/2009/07/09/mef-preview-6-available.aspx&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: 맑은 고딕; FONT-SIZE: 10pt&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Querying the CompositionContrainer</title>
      <id>http://www.zemna.net/133651</id>
      <published>2009-07-26T17:53:25+09:00</published>
      <updated>2009-07-26T17:53:25+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133651"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133651#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Querying the CompositionContainer&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/68&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/68&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;CompositionContainer 의 Exported 구성 요소를 취득하기 위해서는 컨테이너에 하나의 구성 요소만이 존재해야 합니다. 쿼리(Query) 를 통해 이러한 객체들이 여러 개 존재할 경우 MEF 는 예외를 발생하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;바로 아래와 같은 경우이죠.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;하나의 인스턴스를 요청할 때, 인스턴스를 찾지 못했을 경우&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;하나의 인스턴스를 요청할 때, 인스턴스가 여러 개일 경우&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;GetExportedObject&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;일반적으로 ExportAttribute 에 인자가 전달되지 않은 경우는 클래스의 타입이 키 값이 되어, 아래와 같이 구성 요소를 취득할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; export = container.GetExportedObject&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export1&lt;/span&gt;&amp;gt;();&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; export.Say();&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.ReadKey();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Export1 Say..&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;만약, ExportAttribute 에 Contract Name 이 선언이 될 경우는 클래스의 타입 정보와 Contract Name 이 일치해야 구성요소를 취득할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; export = container.GetExportedObject&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export2&lt;/span&gt;&amp;gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;export2&quot;&lt;/span&gt;);&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; export.Say();&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.ReadKey();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;export2&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Export2 Say..&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;GetExport&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;만약 여러 개의 구성 요소의 인스턴스가 필요하다면 GetExport 메서드를 통해 Export 의 구성 정보를 가져오면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; exports = container.GetExport&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export1&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;exports.GetExportedObject().Say();&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;필요하다면 ExportAttribute 의 Contract Name 으로 질의(Query) 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; exports = container.GetExport&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export2&lt;/span&gt;&amp;gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;export2&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;exports.GetExportedObject().Say();&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아쉽게도 MEF Preview 4 까지 지원하던 C# 3.0 의 Expression 을 통해 질의하는 방법은 MEF Preview 5 이후 없어진 것이 아쉽네요.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;GetExportedObjectOrDefault&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;일반적으로 MEF 에서는 질의(Query) 결과가 없을 경우 예외를 발생하게 되는데, GetExportedObjectOrDefault 메서드를 통해 결과가 없을 경우 Null 값으로 대체할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; obj = container.GetExportedObjectOrDefault&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export1&lt;/span&gt;&amp;gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;( obj != &lt;span style=&quot;COLOR: blue&quot;&gt;null&lt;/span&gt; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj.Say();&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Recomposition</title>
      <id>http://www.zemna.net/133647</id>
      <published>2009-07-26T17:52:30+09:00</published>
      <updated>2009-07-26T17:52:30+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133647"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133647#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;1&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Recomposition&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;출처 : &lt;a href=&quot;http://vsts2010.net/42&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/42&lt;/a&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이전 포스트의&lt;span lang=&quot;EN-US&quot;&gt; MEF &lt;/span&gt;의 특징 중에&lt;span lang=&quot;EN-US&quot;&gt; MEF &lt;/span&gt;의 플러그인 모델&lt;span lang=&quot;EN-US&quot;&gt;(Plugin Model) &lt;/span&gt;은 교체가 용이하다고 하였습니다&lt;span lang=&quot;EN-US&quot;&gt;. Composable Part &lt;/span&gt;는 구성 요소로써 고유의 기능을 구현합니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;그리고&lt;span lang=&quot;EN-US&quot;&gt; MEF &lt;/span&gt;는 각각의&lt;span lang=&quot;EN-US&quot;&gt; Composable Part &lt;/span&gt;를 조립하여 다양한 컴포넌트 또는 애플리케이션을 완성합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;어떠한 경우에는 특정한 구성 구성요소를 사용하다가 그것이 필요 없어질 경우 구성 요소를 언로드&lt;span lang=&quot;EN-US&quot;&gt;(Unload) &lt;/span&gt;하거나 다른 구성요소로 교체할 필요가 있습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot; lang=&quot;EN-US&quot;&gt;MEF &lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;의 이러한 유연함의 예를 들어보죠&lt;span lang=&quot;EN-US&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;예를 들어&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;어플리케이션의 로그&lt;span lang=&quot;EN-US&quot;&gt;(Log) &lt;/span&gt;기능을 생각해볼 수 있습니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;만약 어플리케이션이 동작하는 환경이 인터넷에 연결되지 않는 환경이라면 사용자의 컴퓨터 로컬에 로그를 기록하다가&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;인터넷에 연결될 경우 외부 데이터베이스로 로그를 기록하는 시나리오를 가정할 수 있습니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;그리고 이러한 기능 또는 요구 사항이 언제 변경될지도 모르는 일입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;일단 위의 시나리오를 구현하기 여러 가지 고려해야 할 사항이 있고&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;기능 또는 요구 사항이 변경될 경우도 고려해야 합니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;결국&lt;span lang=&quot;EN-US&quot;&gt;, MEF &lt;/span&gt;는 이러한 변화에 굉장히 유연하게 대처할 수 있습니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;MEF &lt;/span&gt;에서&lt;span lang=&quot;EN-US&quot;&gt; ImportAttribute &lt;/span&gt;의&lt;span lang=&quot;EN-US&quot;&gt; AllowRecomposition &lt;/span&gt;프로퍼티를 통해 구성 요소를 런타임&lt;span lang=&quot;EN-US&quot;&gt;(Runtime) &lt;/span&gt;시 동적&lt;span lang=&quot;EN-US&quot;&gt;(Dynamic) &lt;/span&gt;으로 교체할 수 있도록 합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래는 위의 예로 든 시나리오를 구현하기 위해 작성한 간단한 소스 코드 입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;ILogger &lt;/span&gt;인터페이스&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 5.4pt 5.4pt 5.4pt 5.4pt&quot; class=&quot;10&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes&quot;&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Write();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;ILogger &lt;/span&gt;인터페이스는&lt;span lang=&quot;EN-US&quot;&gt; Write &lt;/span&gt;메서드를 통해 로그를 기록할 수 있는 예입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;TextLogger &lt;/span&gt;클래스&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 5.4pt 5.4pt 5.4pt 5.4pt&quot; class=&quot;10&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes&quot;&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;[&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;))]&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;TextLogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; : &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Write()&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;.WriteLine(&lt;/font&gt;&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logged TextLogger&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;DatabaseLogger &lt;/span&gt;클래스&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 5.4pt 5.4pt 5.4pt 5.4pt&quot; class=&quot;10&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes&quot;&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;[&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;))]&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;DatabaseLogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; : &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Write()&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;.WriteLine(&lt;/font&gt;&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logged DatabaseLogger&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;LoggerContext &lt;/span&gt;클래스&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 5.4pt 5.4pt 5.4pt 5.4pt&quot; class=&quot;10&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes&quot;&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;[&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;LoggerContext&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;[&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(AllowRecomposition=&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Context { &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ImportingConstructor&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; LoggerContext(&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ILogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; sender)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;여기에서&lt;span lang=&quot;EN-US&quot;&gt; ImportAttribute &lt;/span&gt;의&lt;span lang=&quot;EN-US&quot;&gt; AllowRecomposition &lt;/span&gt;프로퍼티의 값을&lt;span lang=&quot;EN-US&quot;&gt; true &lt;/span&gt;로 지정해 주었습니다&lt;span lang=&quot;EN-US&quot;&gt;. AllowRecomposition &lt;/span&gt;프로퍼티가&lt;span lang=&quot;EN-US&quot;&gt; true &lt;/span&gt;일 경우&lt;span lang=&quot;EN-US&quot;&gt; Imported &lt;/span&gt;된 구성 요소를 동적&lt;span lang=&quot;EN-US&quot;&gt;(Dynamic)&lt;/span&gt;하게 교체할 수 있도록 합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;b style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;Main &lt;/span&gt;어플리케이션&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 5.4pt 5.4pt 5.4pt 5.4pt&quot; class=&quot;10&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes&quot;&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Main(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; p = &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p.Run();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Run()&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; catalog&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;= &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;TypeCatalog&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;LoggerContext&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;)));&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; container = &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(catalog);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; batch = &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; defaultPart = batch.AddPart(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;TextLogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;());&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;container.Compose(batch);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; obj = container.GetExportedObject&amp;lt;&lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;LoggerContext&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;obj.Context.Write();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;batch = &lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;batch.RemovePart(defaultPart);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;batch.AddPart(&lt;/font&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;DatabaseLogger&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;());&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;container.Compose(batch);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;obj.Context.Write();&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; WORD-BREAK: keep-all; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-tab-count: 1&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt; mso-bidi-font-family: &apos;Times New Roman&apos;; mso-font-kerning: 0pt; mso-no-proof: yes&quot; lang=&quot;EN-US&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이 코드는 처음에&lt;span lang=&quot;EN-US&quot;&gt; TextLogger &lt;/span&gt;를 사용하다가&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;필요 없어진&lt;span lang=&quot;EN-US&quot;&gt; TextLogger &lt;/span&gt;를 제거하고&lt;span lang=&quot;EN-US&quot;&gt; DatabaseLogger &lt;/span&gt;로 교체하는 코드입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;아래는 위의 소스 코드를 실행한 결과입니다.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: center; MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: center; CLEAR: both&quot; class=&quot;imageblock center&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/1110920D49EB2C272684B0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://cfile2.uf.tistory.com/image/1110920D49EB2C272684B0&quot; width=&quot;359&quot; height=&quot;118&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;TEXT-ALIGN: center; MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;[그림1] 소스 코드 실행 결과&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;1&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Wow! Recomposition&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;사실 이러한 것이 기존에는 기능의 정의 또는 요구 사항에 따라 직접 구현할 수 있었지만&lt;span lang=&quot;EN-US&quot;&gt;, MEF &lt;/span&gt;의 특징인 플러그인 모델&lt;span lang=&quot;EN-US&quot;&gt;(Plugin Model) &lt;/span&gt;은 이러한 고민에 대해 좋은 방법을 제공해 줍니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;개발자는 자신이 구현해야 할 기능에 더 충실하고&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;비즈니스 로직에 대한 고민만을 하면 됩니다&lt;span lang=&quot;EN-US&quot;&gt;. &lt;/span&gt;그리고 정책에 따라 그것을 집행하는 결정권을 가진 자는 구현된 구성 요소를 조립하고 교체하여 기존의 정적인&lt;span lang=&quot;EN-US&quot;&gt;(Static) &lt;/span&gt;어플리케이션에게 동적인&lt;span lang=&quot;EN-US&quot;&gt;(Dynamic) &lt;/span&gt;유연함을 제공합니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0cm 0cm 0pt&quot; class=&quot;MsoNormal&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;기존에 정적인 어플리케이션은 변화에 따라 유지 보수를 위해 지속적인 많은 리소스가 필요하였지만&lt;span lang=&quot;EN-US&quot;&gt;, &lt;/span&gt;플러그인 모델&lt;span lang=&quot;EN-US&quot;&gt;(Plugin Model) &lt;/span&gt;의 동적인 어플리케이션은 그러한 변화에 능동적으로 대처할 수 있는 큰 기쁨을 줄 수 있을 것입니다&lt;span lang=&quot;EN-US&quot;&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Strongly Typed Metadata</title>
      <id>http://www.zemna.net/133643</id>
      <published>2009-07-26T17:51:37+09:00</published>
      <updated>2009-07-26T17:51:37+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133643"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133643#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Strongly Typed Metadata&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/34&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/34&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;http://blog.powerumc.kr/article/2009/04/16/MEF-7-Exports-and-Metadata.aspx&quot; target=&quot;_top&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span&gt;&lt;font color=&quot;#d56600&quot;&gt;&lt;span&gt;지난 &lt;/span&gt;&lt;span&gt;포스트의&lt;/span&gt;&lt;span&gt; [MEF] 7. Exports and Metadata&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;를 통해 Export 의 Contract 에 Metadata 를 제공하는 방법을 알아보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MetadataAttribute 을 선언하여 Export 의 Metadata 를 제공하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Email&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logging&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import EmailMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; TEXT-AUTOSPACE: ideograph-numeric; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;Export 에 Metadata 를 제공해 주어서 무척 고맙지만, 위의 방법처럼 MetadataAttribute 를 선언하는 방법을 사용하기에 그다지 내키지 않는 구석이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아무래도 아래와 같은 이유 때문이겠죠?&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;메타데이터의 타입 불안정&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;빌드 시 오류를 해결이 어려움&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;사용상 모든 키값을 외우기 어렵고, 오타 발생 위험&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;위의 이유 때문에 Metadata 를 사용하기 위해 강력한 타입을 원하게 될 것입니다. 그리고 강력한 타입의 Metadata 를 사용하길 권장 드립니다.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Declaring Strongly Typed Metadata&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Attribute 을 상속받아 Export 의 Metadata 를 Strongly Typed 으로 확장시키는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래의 Stringly Typed Metadata 를 위해 Attribute 클래스를 만드는 소스 코드 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MetadataAttribute&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeUsage&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeTargets&lt;/span&gt;.Class, AllowMultiple=&lt;span style=&quot;COLOR: blue&quot;&gt;false&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTypeAttribute&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; Transport { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt; IsSecure { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; MessageSenderTypeAttribute() { }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; MessageSenderTypeAttribute(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; transport)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;(transport, &lt;span style=&quot;COLOR: blue&quot;&gt;false&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; MessageSenderTypeAttribute(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; transport, &lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt; isSecure)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.Transport = transport;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.IsSecure&amp;nbsp;= IsSecure;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Email,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Phone,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sms&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Strongly Typed Metadata 를 위한 Attribute 클래스를 완성하였으면, 이것을 그대로 ExportAttribute 과 함께 추가적으로 선언하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;그리고 ExportAttribute 을 선언한 코드에 위의 Attribute 특성을 부여합니다. 아래는 그 소스 코드의 일부입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderType&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;.Email)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import EmailMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderType&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;.Phone, &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;PhoneMessageSneder&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import PhoneMessageSneder&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderType&lt;/span&gt;(Transport=&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;.Sms, IsSecure=&lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;SmsMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import SmsMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;그렇다면 아래와 같이 Metadata 를 Strongly Typed 으로 질의(Query) 할 수 있게 됩니다. &lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래의 소스 코드는 &lt;a href=&quot;http://blog.powerumc.kr/article/2009/04/16/MEF-7-Exports-and-Metadata.aspx&quot; target=&quot;_top&quot;&gt;&lt;span&gt;&lt;font color=&quot;#d56600&quot;&gt;&lt;span&gt;지난 &lt;/span&gt;&lt;span&gt;포스트&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;의 소스 전체 소스 코드를 참고하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; (&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; export &lt;span style=&quot;COLOR: blue&quot;&gt;in&lt;/span&gt; program.Sender)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;if&lt;/span&gt; ((&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;)export.Metadata[&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Transport&quot;&lt;/span&gt;] == &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;.Sms)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; export.GetExportedObject().Say();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;if&lt;/span&gt; ((&lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt;)export.Metadata[&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;IsSecure&quot;&lt;/span&gt;] == &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Security message&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;위의 소스 코드 실행 결과는 원하던 결과대로 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF8/capture1.jpg&quot; width=&quot;346&quot; height=&quot;117&quot; /&gt;&lt;br  /&gt;[그림1] Strongly Typed 질의 결과&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;하지만 아직도 문제는 남아 있는 것 같아 보이네요.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; Strongly Typed 으로 Export Metadata 를 선언하였지만 여전히 질의(Query) 과정은 똑같은 문제점을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;메타데이터의 질의(Query) 과정의 타입 불안정&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;빌드 시 오류를 해결이 어려움&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;사용상 모든 키값을 외우기 어렵고, 오타 발생 위험&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;More Strongly Typed Metadata Query&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Metadata 를 질의(Query) 하기 위해 MEF 는 보다 강력하게 Import 하는 방법을 제공해 줍니다. 확장된 MetadataAttribute 에 인터페이스(Interface) 를 구현하도록 하여 Import 시에 인터페이스(Interface) 를 통한 Metadata 를 질의(Query) 하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;우선 Attribute 에 사용되는 프로퍼티를 인터페이스로 선언합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSenderTypeAttribute&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt; IsSecure { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; Transport { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;단, 여기에서 반드시 Getter 만 선언하셔야 합니다. Setter 를 선언하시면 MEF 는 Setter 프로퍼티로 인해 유효하지 않는 Attribute 으로 인식하여 예외를 발생하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래의 소스 코드는 Metadata Attribute 클래스에 위의 인터페이스를 구현한 코드 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MetadataAttribute&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeUsage&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeTargets&lt;/span&gt;.Class, AllowMultiple=&lt;span style=&quot;COLOR: blue&quot;&gt;false&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTypeAttribute&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Attribute&lt;/span&gt;, &lt;strong&gt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSenderTypeAttribute&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; Transport { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt; IsSecure { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; MessageSenderTypeAttribute() { }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; MessageSenderTypeAttribute(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; transport)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;(transport, &lt;span style=&quot;COLOR: blue&quot;&gt;false&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; MessageSenderTypeAttribute(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt; transport, &lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt; isSecure)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.Transport = transport;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.IsSecure&amp;nbsp;= IsSecure;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이제 Export 의 MetadataView 로 질의할 수 있도록 MetadataView 의 인터페이스를 알려주도록 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: #2b91af; FONT-SIZE: 9pt&quot;&gt;ExportCollection&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;, &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSenderTypeAttribute&lt;/span&gt;&amp;gt; Sender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래의 소스 코드는 MetadataView 를 통해 Strongly Typed 으로 Export Metadata 를 질의(Query) 하는 소스 코드 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: #2b91af; FONT-SIZE: 9pt&quot;&gt;ExportCollection&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;, &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSenderTypeAttribute&lt;/span&gt;&amp;gt; Sender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; program = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; program.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; export &lt;span style=&quot;COLOR: blue&quot;&gt;in&lt;/span&gt; program.Sender)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;if&lt;/span&gt; (export.MetadataView.Transport == &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSenderTransport&lt;/span&gt;.Email)&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; export.GetExportedObject().Say();&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Exports and Metadata</title>
      <id>http://www.zemna.net/133639</id>
      <published>2009-07-26T17:50:44+09:00</published>
      <updated>2009-07-26T17:50:44+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133639"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133639#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Exports and Metadata&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;출처 : &lt;a href=&quot;http://vsts2010.net/33&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/33&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Export 에 Metadata 를 등록하고 제어하는 방법입니다. &lt;a href=&quot;http://blog.powerumc.kr/article/2009/04/07/MEF-3-Declaring-Import.aspx&quot; target=&quot;_top&quot;&gt;&lt;font color=&quot;#d56600&quot;&gt;지난 포스트&lt;/font&gt;&lt;/a&gt;에서 알 수 있듯이 Export 는 구성 요소간에 Contact 를 제공하여 이들을 구성(Composition) 할 수 있는 플러그인 모델(Plugin Model) 을 제공해 줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;하지만 Contract 가 제공되어 구성 요소를 확장하고 구성하는 것은 매우 용이하다는 것을 알게 되었으나 Contract 로 인해 파생된 다양한 구성 요소를 어떻게 제어하느냐의 고민을 하게 됩니다. 즉, 다양한 구성 요소 가운데 내가 필요로 하는 구성 요소를 골라낼 수 있도록 Metadata 를 제공하여 구성 요소를 질의(Query)할 수 있도록 하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&amp;nbsp;&lt;br  /&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF7/capture7.jpg&quot; width=&quot;655&quot; height=&quot;390&quot; /&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;br  /&gt;예를 들어 아래와 같은 Export 구성 요소 중 어떻게 EmailMessageSender 로 Say() 를 호출할 것인가가 문제인 것이죠.&lt;br  /&gt;&lt;br  /&gt;&lt;/font&gt;&lt;/font&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import EmailMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;PhoneMessageSneder&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import PhoneMessageSneder&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;SmsMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import SmsMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이런 경우, 원초적인 방법으로 리플랙션(Reflection) 을 이용하여 Type 검사를 통해 EmailMessageSender 를 골라내서 사용하면 되지만, 직접적으로 Type 을 검사하기 위해서는 Tightly Coupling 이 발생하여 결국 유연한 플러그인 모델을 구현하기 위해 아무런 도움이 되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이러한 방법을 해소하기 위해 또 다른 우회 방법은 리플랙션을 통해 Modules Name 으로 비교하는 방법이지만, 이것 또한 플러그인 모델에서 구성 요소가 교체 되었을 경우를 생각하면 전혀 대응할 수 없는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 에서는 이런 문제를 해소하기 위해 Contract 에 Metadata 를 제공하며 정적/동적인 방법을 제공해 줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Attaching Metadata to an Export&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Export 에 Metadata 를 제공해 주기 위해서 MEF 에서는 ExportMetadataAttribute 특성을 제공해 줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeUsage&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeTargets&lt;/span&gt;.Class | &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeTargets&lt;/span&gt;.Property | &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeTargets&lt;/span&gt;.Method | &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AttributeTargets&lt;/span&gt;.Field, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllowMultiple = &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;, Inherited = &lt;span style=&quot;COLOR: blue&quot;&gt;false&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; ExportMetadataAttribute(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; name, &lt;span style=&quot;COLOR: blue&quot;&gt;object&lt;/span&gt; value)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;왜 ExportMetadata 클래스는 sealed 로 선언이 되었나요?&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;일반적으로 sealed 로 클래스를 봉인할 경우 리플랙션의 성능이 향상됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/ko-kr/library/ms229023.aspx&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#d56600&quot;&gt;http://msdn.microsoft.com/ko-kr/library/ms229023.aspx&lt;/font&gt;&lt;/a&gt; &lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;ExportMetadata 는 키와 값(Key/Value) 을 지정하여 Contract 에 Metadata 를 제공해 줄 수 있습니다. 그리고 하나의 Export 에 여러 개의 Metadata 를 제공할 수 있도록 AllowMultiple 을 지원합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Metadata 는 여러 가지의 정보를 포함할 수 있습니다. Export 가 제공하는 기능의 특성을 기술할 수 있으며, 예를 들어, 권한, 로깅, 구성 요소 분류 방법 등이 될 수 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래의 소스 코드는 Metadata 를 지정하는 예를 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Email&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logging&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import EmailMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Phone&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;PhoneMessageSneder&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import PhoneMessageSneder&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Sms&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;SmsMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import SmsMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Constraining Imports statically&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BACKGROUND: #d9d9d9; BORDER-TOP: medium none; BORDER-RIGHT: medium none&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BACKGROUND-COLOR: transparent; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;MEF Preview 5 &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;에서는 ImportRequiredMetadataAttribute 클래스가 제거되었습니다.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF Preview 4 에서는 선언적인 방법으로 ImportRequiredMetadataAttribute 를 통해 Metadata 를 질의할 수 있었으나, MEF Preview 5 에서는 ImportRequiredMetadataAttribute 클래스가 제거되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아마도 추측으로는 ImportRequiredMetadataAttribute 를 선언 시에 여러 개의 구성 요소가 검색될 경우 Exception 이 발생하는데, Exception 을 최소화 하고자 제거가 된 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;혹시 Statically 한 방법으로 ImportRequiredMetadataAttribute 에 대응되는 클래스를 아시면 저에게 알려주세요.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Constraining Imports dynamically&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이 방법은 Export 의 ExportMetadata 를 런타임 시에 질의(Query) 하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Import 시 ExportCollection&amp;lt;T&amp;gt; 을 사용하여 Export 를 수동적으로 질의(Query) 하는 방법입니다. 이 방법은 &lt;a href=&quot;http://blog.powerumc.kr/article/2009/04/13/MEF-6-Lazy-Exports.aspx&quot; target=&quot;_top&quot;&gt;&lt;font color=&quot;#d56600&quot;&gt;지난 포스트의 Lazy Load 를 이용한 방법&lt;/font&gt;&lt;/a&gt;으로 단지 Metadata 만 질의(Query) 뿐이고, 객체의 생성에 대한 판단은 필요 시에만 GetExportedobject() 메서드를 이용하여 생성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Collections.Generic;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Linq;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Text;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.ComponentModel.Composition;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.ComponentModel.Composition.Hosting;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Reflection;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; MetadataSample&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportCollection&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&amp;gt; Sender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; program = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; program.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; export &lt;span style=&quot;COLOR: blue&quot;&gt;in&lt;/span&gt; program.Sender)&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;if&lt;/span&gt; ((&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;)export.Metadata[&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;] == &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Email&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; export.GetExportedObject().Say();&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;if&lt;/span&gt; (export.Metadata.ContainsKey(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logging&quot;&lt;/span&gt;) &amp;amp;&amp;amp;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;span style=&quot;COLOR: blue&quot;&gt;bool&lt;/span&gt;)export.Metadata[&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logging&quot;&lt;/span&gt;] == &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logged success&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Email&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Logging&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: blue&quot;&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import EmailMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Phone&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;PhoneMessageSneder&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import PhoneMessageSneder&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportMetadata&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;SenderType&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Sms&quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;SmsMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Import SmsMessageSender&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;실행 결과는 예상할 수 있듯이 아래와 같이 런타임 시에 결과를 보여줍니다.&lt;/font&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF7/capture8.jpg&quot; width=&quot;358&quot; height=&quot;124&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Lazy Exports</title>
      <id>http://www.zemna.net/133635</id>
      <published>2009-07-26T17:49:48+09:00</published>
      <updated>2009-07-26T17:49:48+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133635"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133635#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;일반적인 Exports&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/30&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/30&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Composable Part 를 구성하는 동안 특정&lt;span&gt; Part 에 대한 요청으로 객체 내부의 객체가 필요할 때가 있습니다. 만약 객체가 이런 연관 관계가 있을 경우 객체 내부에 ImportAttribute 을 선언하여 외부 Part 를 Import 할 수 있습니다. 이런 경우는 객체 내부에 Export 간의 Related 관계를 갖게 됨으로써 자동적으로 객체를 초기화할 수 있게 됩니다. (&lt;a href=&quot;http://blog.powerumc.kr/article/2009/03/29/Declaring-Exports.aspx&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#d56600&quot;&gt;[MEF] 3. Export 선언 참조)&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;일반적인&lt;span&gt; Export 를 통해 객체 내부에 Import 를 선언하는 방법입니다.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; obj = container.GetExportedObject&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj.Sender.Say();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Say Method&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt; Sender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Lazy Exports&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;하지만 비용이 비싼 객체를 생성할 경우 위의 [일반적인 Exports] 는 매우 비효율적일 수 있습니다. 객체 내부의 Import Object 를 사용하지 않을 가능성이 크거나, 객체의 생성 비용이 클 경우는 Lazy Export 를 고려해야 합니다. 그리고 내부 객체가 동기적(Synchronicity)이 아닌 비동기성(Asynchronism) 성격의 객체일 경우에도 반드시 필요한 기법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이런 경우 내부 객체의 생성을 선택적, 수동적으로 제어하여, 게으른 초기화(Lazy Initialization) 를 할 필요가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아래의 굵은 표시의 코드가 Lazy Export 로 제어하는 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; obj = container.GetExportedObject&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obj.Sender.Say();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; lazyObj = container.GetExportedObject&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSenderByLazyExport&lt;/span&gt;&amp;gt;();&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lazyObj.Sender.GetExportedObject().Say();&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Say Method&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSender&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt; Sender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EmailMessageSenderByLazyExport&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&amp;gt; Sender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;ImportAttribute 의 프로퍼티를 Export&amp;lt;T&amp;gt; 타입으로 변경하면 내부 객체를 GetExportedObject() 메서드를 이용하여 지연하여 객체를 생성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Catalog 사용</title>
      <id>http://www.zemna.net/133631</id>
      <published>2009-07-26T17:48:59+09:00</published>
      <updated>2009-07-26T17:48:59+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133631"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133631#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Catalog&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/27&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/27&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Catalog 는 동적으로 Composable Part 를 찾아 Container 에 등록합니다. Composable Part 는 ExportAttribute 으로 Contract 를 선언할 수 있는데 개별적으로 일일이 Composable Part 를 등록하는 것은 너무나 큰 반복 작업이 될 수 있지만, MEF 의 Catalog 로 쉽게 자동적으로 등록을 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Catalog 를 사용하지 않는 Composable Part 의 등록는 매우 고단한 작업입니다. 아래의 예제 소스 코드는 수동으로 Composable Part 를 등록하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;br  /&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF5/capture1.jpg&quot; width=&quot;342&quot; height=&quot;156&quot; /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;예제에서는 단지 하나의 Export 를 등록하였지만 실제로 이러한 Composable Part 는 수십에서 수백개를 넘을 수 도 있습니다. 많은 Composable Part 를 동적이고 또는 자동적으로 등록해 주기 위해서 Catalog 를 사용하면 쉽게 해결할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;br  /&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF5/capture2.jpg&quot; /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이 외에도 Composable Part 를 Catalog 에 등록하는 여러 가지 방법이 있습니다. 아래는 MEF 에서 지원하는 Catalog 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Assembly Catalog&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Assembly Catalog 는 닷넷 어셈블리를 Catalog 로 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; AssemblyCatalog(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; codeBase)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; AssemblyCatalog(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt; assembly)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly());&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;AssemblyCatalog 의 시그너처(Signature) 에서 보듯이 CodeBase 로 Catalog 를 사용할 수 있지만, 실버라이트에서는 CodeBase 를 지원하지 않으므로 실버라이트에서는 CodeBase 로 AssemblyCatalog 를 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Directory Catalog&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Directory Catalog 를 사용하면 특정 폴더의 어셈블리를 모두 검색하여 Composable Part 를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; DirectoryCatalog(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; path)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; DirectoryCatalog(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; path, &lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; searchPattern)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Directory Catalog 는 내부적으로 System.IO 의 Directory.GetFiles() 메서드를 사용하여 지정한 폴더의 모든 어셈블리를 검색하도록 하여 Composable Part 를 가져오도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;DirectoryCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Addins&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;기본적으로 *.DLL 확장자의 어셈블리만 검색하도록 설정되어있고, 어셈블리 파일의 검색 패턴을 지정하여 검색할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;DirectoryCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Addins&quot;&lt;/span&gt;, &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;*.exe&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;아마 MEF 의 예제중에 XFileExplorer 처럼 특정 폴더에 어셈블리를 복사해 넣으면 자동으로 Composable Part 가 로드되는 예제가 있는데, 이것은 DirectoryCatalog 가 자동으로 처리해 주는 것이 아니라 FileSystemWatcher 클래스를 이용하여 직접 구현해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;FileSystemWatcher &lt;/span&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;로 파일의 변경이 감지되면 DirectoryCatalog 의 Refresh() 메서드를 이용하여 폴더를 재검색 또는 새로고침을 할 수 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Aggregation Catalog&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Aggregation Catalog 는 복합적인 Catalog 를 사용할 수 있도록 합니다. 만약 Assembly Catalog 와 Directory Catalog 등을 동시에 사용하여 Composable Part 를 가져오도록 하려면 Aggregation Catalog 를 사용하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; AggregateCatalog(&lt;span style=&quot;COLOR: blue&quot;&gt;params&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;ComposablePartCatalog&lt;/span&gt;[] catalogs)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Aggregation Catalog 의 생성자는 params 로 인자를 받을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;(&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;DirectoryCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;.&quot;&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Type Catalog&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Type Catalog 는 Composable Part 를 Type 으로 개별적으로 사용하도록 합니다. 가장 단순하고 무식(?)한 방법일 수도 있지만 세세한 제어가 필요할 때 사용 가능한 Catalog 일 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; TypeCatalog(&lt;span style=&quot;COLOR: blue&quot;&gt;params&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Type&lt;/span&gt;[] types)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; TypeCatalog(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Type&lt;/span&gt;&amp;gt; types)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;TypeCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(EMailMessageSender), &lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(PhoneMessageSender));&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Using catalog with a Container&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이제 Catalog 를 Composable Container 에서 Composition 하도록 넘겨주는 일만 남았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; CompositionContainer()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; CompositionContainer(&lt;span style=&quot;COLOR: blue&quot;&gt;params&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportProvider&lt;/span&gt;[] providers)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; CompositionContainer(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ComposablePartCatalog&lt;/span&gt; catalog, &lt;span style=&quot;COLOR: blue&quot;&gt;params&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;ExportProvider&lt;/span&gt;[] providers)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Imports 선언</title>
      <id>http://www.zemna.net/133627</id>
      <published>2009-07-26T17:46:05+09:00</published>
      <updated>2009-07-26T17:46:05+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133627"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133627#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Import 선언&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/21&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/21&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 의 구성 요소에 System.ComponentModel.Composition.ImportAttribute 특성을 선언하여 Import 를 선언할 수 있습니다. Import 는 Export 와 사용 방법이 매우 유사합니다. Import 는 프로퍼티(Properties), 필드(Fields), 생성자(Constructors) 에 선언할 수 있으며, 계약된 Export 구성 요소들을 Import 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Property Import&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;프로퍼티로 값을 가져오기 위해 ImportAttribute 특성을 선언하면 됩니다. &lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;Import 특성은 세 가지의 시그너처(Signature) 를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ImportAttribute();&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ImportAttribute(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; contractName);&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ImportAttribute(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Type&lt;/span&gt; contractType);&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;일반적으로 타입을 명시하지 않을 경우 프로퍼티의 타입이 Export 의 계약(Contract) 을 결정하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래는 프로퍼티에 Import 를 사용하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: #2b91af&quot;&gt;MessageProcess&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; MessageProcess { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Field Import&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;필드의 Import 는 프로퍼티에 Import 를 선언하는 방법과 동일합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: #2b91af&quot;&gt;MessageProcess&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; _messageProcess;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Constructor Parameters (생성자 파라메터)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;Constructor Parameters 는 ImportingConstructor 특성을 사용하여 정의합니다. 특히 Constructor Parameters 는 여러 구성 요소를 사용하기 위해 프로퍼티 또는 필드로 선언되는 Import 의 선언을 생략할 수 있어 편리하게 사용할 수 있습니다. 또한, 암시적인 Import 가 가능하기 때문에 수동적으로 이것을 제어할 필요가 없으며, 구성 요소의 교체가 매우 용이합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래의 코드는 ImportingConstructor 특성을 이용하여 암시적으로 Import 하는 예입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Controller&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;View&lt;/span&gt; CurrentView { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Model&lt;/span&gt; CurrentModel { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ImportingConstructor&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; Controller(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;View&lt;/span&gt; view, &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Model&lt;/span&gt; model)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.CurrentView = view;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.CurrentModel = model;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;명시적인 Import 를 하기 위해서는 생성자 파라메터에 ImportAttribute 특성을 명시해 주면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래는 Constructor Parameters 예의 전체 소스 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Collections.Generic;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Linq;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Text;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Reflection;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.ComponentModel.Composition;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.ComponentModel.Composition.Hosting;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ImportSample&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;STAThread&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catalog.Catalogs.Add(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; controller = container.GetExportedObject&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Controller&lt;/span&gt;&amp;gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(controller.CurrentView.ToString());&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(controller.CurrentModel.ToString());&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Controller&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;View&lt;/span&gt; CurrentView { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Model&lt;/span&gt; CurrentModel { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;ImportingConstructor&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; Controller(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;View&lt;/span&gt; view, &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Model&lt;/span&gt; model)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.CurrentView = view;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;.CurrentModel = model;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;View&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; ToString()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Export View&quot;&lt;/span&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Model&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; ToString()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Export Model&quot;&lt;/span&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;실행 결과는&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF4/capture1.jpg&quot; width=&quot;368&quot; height=&quot;136&quot; v:shapes=&quot;그림_x0020_1&quot; /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;[그림1] Constructor Parameters 예제 소스 코드 실행 결과&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;Importing Collection&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;MEF 는 Composable Container 의 모든 Contract 의 인스턴스를 컬렉션으로 가져올 수 있습니다. MEF 는 플러그인 모델(Plugin Model) 로써 구성 요소를 교체와 추가/제거가 용이하다고 하였습니다. 이러한 구성 요소가 동적으로 교체 또는 컨테이너에 의해 관리가 되면서 구성 요소는 업데이트 또는 Recomposable(재구성 가능한) 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;Contract 기반의 MEF 구성 요소는 동적인(Dynamic)한 환경을 제공하며, 이것을 관리하기 위해 컬렉션으로 제어할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래는 Importing Collection 의 예제 소스 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Collections.Generic;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Linq;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Text;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Reflection;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.ComponentModel.Composition;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.ComponentModel.Composition.Hosting;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ImportSample&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&amp;gt; MessageSenders;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;STAThread&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; sender &lt;span style=&quot;COLOR: blue&quot;&gt;in&lt;/span&gt; p.MessageSenders)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sender.Say();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catalog.Catalogs.Add(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;PhoneMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Message Send - Phone&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;))]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;EMailMessageSender&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IMessageSender&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Message Send - EMail&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;IMessageSender 인터페이스를 구현한 구성 요소를 컬렉션으로 루핑하여 호출한 결과입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF4/capture2.jpg&quot; width=&quot;393&quot; height=&quot;127&quot; v:shapes=&quot;그림_x0020_4&quot; /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;[그림2] Importing Collection 예제 소스 코드 실행 결과&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;INotifyImportSatisfaction&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;INotifyImportSatisfaction 인터페이스는 Import 처리가 완료가 되었을 때 통보되는 인터페이스 입니다. System.ComponentModel.Composition.INotifyImportSatisfaction 인터페이스는 ImportCompleted() 메서드만 구현하면 됩니다. 클래스내 모든 Import 처리가 완료가 되었을 경우 ImportCompleted() 메서드가 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래 소스 코드는 INotifyImportSatisfaction 인터페이스를 구현한 예 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;INotifyImportSatisfaction&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; ImportCompleted()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Completed&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp; 
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 다시 보기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;br  /&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 마치 어린 아이들이 좋아하던 조립 로봇을 보는 듯한 인상입니다. 로봇의 몸체만 있다면 팔, 다리를 끼워 로봇을 어렵지 않게 완성하는 것처럼 말입니다. 플라스틱 로봇에게 강철 옷을 입히고 싶다면, 로봇을 전부 때려부시고 새로 만들지 않고서도 MEF 를 이용하면 가능합니다. 그리고 칼과 방패를 채워주고 싶다면 그렇게 하시면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF4/capture3.jpg&quot; width=&quot;377&quot; height=&quot;491&quot; /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;[그림3] MEF 와 조립 로봇 (그림 출처는 &lt;a href=&quot;http://cafe.naver.com/faqhtzidzkxgvnsjernw.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=154&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;font color=&quot;#7575a3&quot;&gt;여기&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 를 볼수록 하나의 작은 SOA(Service Oriented Architecture) 라고 봐도 무방할 것 같습니다. (비교하는 것이 무리이긴 하지만…) MEF 의 플러그인 모델(Plugin Model) 은 느슨한 결합(Loose Coupling) 으로 Service 와 EndPoint 의 Contract 기반의 유연한 확장성을 제공해 줍니다. 아마도 단시간내에 새로운 아키텍처의 모델로써 주목을 받을 수 있지 않을까 기대해봅니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Exports 선언</title>
      <id>http://www.zemna.net/133623</id>
      <published>2009-07-26T17:41:43+09:00</published>
      <updated>2009-07-26T17:41:43+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133623"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133623#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Exports 선언&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/16&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/16&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 Export 를 통해 외부로 구성요소를 노출할 수 있습니다. Export 는 System.ComponentModel.Composition.ExportAttribute 특성을 통해 선언합니다. 이 특성은 클래스 뿐만 아니라 프로퍼티와 메서드에도 선언을 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;구성요소 Export 하기&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;ExportAttribute 특성을 사용하여 아래와 같이 구성요소를 외부로 노출하게 됩니다. ExportAttribute 은 몇 가지의 시그너처(Signature) 를 제공하는데 매개변수를 생략하게 될 경우 MEF 은 클래스의 타입으로 Contract 를 매핑하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;프로퍼티 Export&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;프로퍼티를 Export 하는 방법입니다. 프로퍼티를 Export 할 수 있게 되어 여러 가지 면에서 유리할 수 있습니다. &lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;Core CLR 이 제공하는 타입(Type) 뿐만 아니라 외부의 다양한 타입(Type) 을 사용할 수 있습니다. 프로퍼티에 Export 를 선언할 수 있음으로써 Export 를 구조적으로 분리하여 단순화 할 수 있습니다. 그러므로 같은 구성요소 내에서 Export 간의 Related 관계를 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래의 코드와 같이 Timeout 프로퍼티는 Contract 를 맺게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Configuration&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Timeout&quot;&lt;/span&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;int&lt;/span&gt; Timeout&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;COLOR: blue&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;int&lt;/span&gt;.Parse(ConfigurationManager.AppSettings[&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Timeout&quot;&lt;/span&gt;]); }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;UsesTimeout&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Timeout&quot;&lt;/span&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;int&lt;/span&gt; Timeout { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;메서드 Export&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;구성요소의 메서드를 Export 할 수 있습니다. 메서드의 Export 는 기본적으로 대리자(Delegate) 를 통해 호출하게 됩니다. 메서드를 Export 하게되면 보다 더 세세한 제어를 가능하게 하고, 심플하게 방법으로 Code Generating 이 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Action&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;&amp;gt;))]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; message)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(message);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageProcess&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Action&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;&amp;gt;))]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Action&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;&amp;gt; MessageSender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Send()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageSender(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Call send process in MessageProcess&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;그리고 ExportAttribute 은 타입(Type) 대신 문자열을 사용하여 Contract 를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;MessageSender&quot;&lt;/span&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; message)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(message);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageProcess&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;MessageSender&quot;&lt;/span&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Action&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;&amp;gt; MessageSender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Send()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageSender(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Call send process in MessageProcess&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;아래의 소스 코드는 이번 예제에서 사용된 전체 소스 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ExportSample&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageProcess&lt;/span&gt; MessageProcess { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;STAThread&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.MessageProcess.Send();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catalog.Catalogs.Add(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageSender&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;MessageSender&quot;&lt;/span&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt; message)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(message);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;MessageProcess&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;MessageSender&quot;&lt;/span&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Action&lt;/span&gt;&amp;lt;&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;&amp;gt; MessageSender { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Send()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageSender(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Call send process in MessageProcess&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Export 요약&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이렇게 ExportAttribute 을 사용하여 Contract 를 제공하는 것은 굉장히 중요한 의미를 가지게 됩니다. 플러그인 모델(Plugin Model) 에서 Export 는 구성요소를 외부로 노출하는, 즉 Contract 의 방법을 제공해 주게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;COLOR: #202020&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;img alt=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF1/capture1.jpg&quot; src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF1/capture1.jpg&quot; width=&quot;214&quot; height=&quot;259&quot; v:shapes=&quot;그림_x0020_1&quot; /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Contract 맺음으로써 개발자는 Contract Base 로 단지 Contract 만 제공받으면 됩니다. 이러한 Contract 는 제한된 상호작용을 극복하여 대부분의 커플링(Coupling)을 해소할 수 있으며, 플로그인 모델(Plugin Model) 에서 보다 쉽게 구성요소를 캡슐화 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>Parts 와 Contracts 선언</title>
      <id>http://www.zemna.net/133617</id>
      <published>2009-07-26T17:36:02+09:00</published>
      <updated>2009-07-26T17:38:39+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133617"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133617#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;시작하기 전에&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/14&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/14&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 이미 CodePlex 사이트의 Wiki 에 코드를 중심으로 설명이 잘되어 있습니다. 그렇기 때문에 저도 CodePlex 의 사이트를 참고하여 나름대로 각색하여 작성을 하고자 합니다. 레퍼런스가 이미 CodePlex 에 충분하지만, 저는 나만의 시각에서 바라보고 느낀 바를, 그리고 소스 코드를 만들어 가고자 합니다^^ (사실 Wiki 의 설명은 미약할 다름입니다^^;)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;CodePlex 의 Wiki 를 먼저 보실 분은 최신 버전이 적용이 되지 않은 예제도 있으니 이런 부분은 조심해서 리뷰하시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;어플리케이션에 MEF 호스팅하기&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;
&lt;p&gt;
&lt;div style=&quot;TEXT-ALIGN: center; CLEAR: both&quot; class=&quot;imageblock center&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/1904DB0D49C63E3111027D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/1904DB0D49C63E3111027D&quot; alt=&quot;1904DB0D49C63E3111027D&quot; title=&quot;1904DB0D49C63E3111027D&quot; width=&quot;600&quot; height=&quot;271&quot; style=&quot;CURSOR: pointer&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;[그림1] Composition Container&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;맑은 고딕&quot;&gt;Composable Part&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 에 어플리케이션을 호스팅하기 위해서는 몇 가지의 반복적인 절차를 거치면 됩니다. 먼저 MEF 를 호스팅할 수 있는 컨테이너(Container) 를 만들어야 합니다. 컨테이너는 MEF 에서 상위 그룹에 존재하며 MEF 의 파트(Part) 를 관리하며 핵심 역할을 담당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 의 컨테이너는 배치(Batch) 를 구조적으로 구성하고 캡슐화 합니다. 배치(Batch) 의 각 구성 단위를 파트(Part) 라고 부릅니다. 각 파트(Part) 는 닷넷 어셈블리에서 타입(Type) 이 될 수 있으며, 타입(Type) 을 배치(Batch) 로 등록할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;파트(Part) 는 메인 호스트(Main Host) 가 반드시 포함되어야 하며, 아래의 소스 코드에서 보는 것처럼 this 키워드가 바로 메인 호스트(Main Host) 가 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font size=&quot;3&quot; face=&quot;맑은 고딕&quot;&gt;Contract&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이러한 Composable Part 는 다른 컴포넌트와 의존 관계를 갖지 않습니다. 모든 외부 기능(Export) 는 계약(Contract) 를 맺게되며 이것이 필요할 경우에는 Import 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 의 컨테이너는 Contract 정보의 타입 정보나 메타 데이터를 통해 Export 와 Import 를 매칭합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Collections.Generic;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Linq;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Text;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.ComponentModel.Composition;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.ComponentModel.Composition.Hosting;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이러한 파트(Part) 를 제어하는 작업은 어플리케이션 차원에서 유일해야 하므로 스레드(Thread) 작업에 안전하도록 lock 으로 블로킹(Blocking) 되어있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이 작업은 메인 호스트(Main Host) 를 등록하는 과정에 불과하며 실행 시에 아무런 결과가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;외부로 기능 노출하기 (Export)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이제 어떤 플러그인(Plugin) 을 외부로 노출해야 합니다. 외부로 노출하는 이유는 내/외부에서 노출된 확장 기능을 가져다 쓰기 위해서입니다. 확장 기능을 노출하기 위해서는 단지 Export Attribute 을 정의해 주면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Collections.Generic;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Linq;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.Text;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.ComponentModel.Composition;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; System.ComponentModel.Composition.Hosting;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; MEFLab_Hosting_MEF&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say();&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;))]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;HellowWorld&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Hello MEF!&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;인터페이스(Interface) 를 구현한 HelloWorld 클래스는 Export Attribute 를 정의합니다. Export 의 파라메터는 메타 데이터(Meta Data)로 사용되기 때문에 타입(Type) 을 정의해 주어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;혹자는 왜 인터페이스를 정의해야 하느냐고 궁금해 하기도 합니다. 정답을 드리자면, 반드시 인터페이스를 정의하지 않아도 됩니다. 하지만 특히 MEF 에서 인터페이스는 다형적이고 표준적인 메타 데이터를 제공하기 위해 인터페이스를 선언하여 사용하는 것이 좋을 것 같네요^^&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;외부 기능 가져오기 (Import)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Export Attribute 으로 외부로 노출된 확장 기능은 Import Attribute 으로 가져올 수 있습니다. 단, 배치(Batch) 의 파트(Part) 로 등록이 되어 있어야 합니다. 내부적으로 Import 의 타입을 생략할 경우 Export 의 타입의 메타 데이터를 통해 Import 의 개체를 쿼리(Query) 하여 생성하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt; p = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Run();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt; HelloWorldCompoent { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;HellowWorld&lt;/span&gt;());&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style=&quot;COLOR: blue&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HelloWorldCompoent.Say();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;[&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue; FONT-SIZE: 9pt&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;HellowWorld&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Hello MEF!&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; FONT-SIZE: 9pt&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이 예제에서 알 수 있듯이 코드에서 모듈(Module) 이나 타입(Type) 의 관계를 크게 신경 쓰지 않았습니다. Export 와 Import 를 통해서 의존(Dependency) 는 어느 정도 해소된 것처럼 보입니다. (인터페이스만 잘 활용하면 MEF 없이도 충분히 가능합니다)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이것이 끝이라면 정말 재미가 없겠죠. 차차 나오게 될 내용이지만, &lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;이러한 Export 와 Import 를 활용하고 Lazy Load, 그리고 메타 데이터를 이용한 쿼리(Query) 를 활용하게 되면 복잡한 기능을 획기적으로 단순화 할 수 있습니다.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>MEF (Managed Extensibility Framework) 란?</title>
      <id>http://www.zemna.net/133611</id>
      <published>2009-07-26T17:18:58+09:00</published>
      <updated>2009-07-26T17:33:52+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133611"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133611#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF (Managed Extensibility Framework) 란?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;출처 : &lt;a href=&quot;http://vsts2010.net/13&quot; target=&quot;_blank&quot;&gt;http://vsts2010.net/13&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;Menaged Extension Framewkr(이하 MEF) 란? 가장 쉽게 얘기하자면, &lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;어플리케이션과 컴포넌트의 재사용성을 높일 수 있는 프레임워크입니다.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; 기존의 어플리케이션은 하나의 목적을 하나의 어플리케이션으로 구현한 정적인(Statically) 어플리케이션이라면, MEF 는 보다 동적인(Dynamically) 어플리케이션을 구축할 수 있는 새로운 라이브러리를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;기존의 정적인 어플리케이션은 새로운 요구사항으로 기능을 확장할 필요가 있을 경우 새로운 빌드 버전을 필요로 합니다. 그리고 새로운 빌드 버전은 기존 어플리케이션과 확장된 기능간에 종속적인 관계를 탈피할 수 없었습니다. 이미 프로그램 언어를 사용하여 코드를 작성하는 분들이라면 반복적이거나 확장에 대해 많은 고민을 한번쯤 해보았을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;img src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF1/capture1.jpg&quot; alt=&quot;capture1.jpg&quot; title=&quot;capture1.jpg&quot; width=&quot;214&quot; height=&quot;259&quot; style=&quot;&quot; /&gt;&lt;br  /&gt;[그림1] MEF 의 컨셉 이미지&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 플랫폼의 저레벨(Low Level) 에서 공통된 추상적인 기능을 제공하고 여러 곳에 흩어진 이중 작업을 감소시킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;몇 달 전 마이크로소프트에서는 Application Framework Core 팀이라 부르는 팀이 만들어졌다고 합니다. 이 팀은 ASP.NET, Windows Forms, WPF, Silverlight 의 여러 플랫폼에서 동작하기 위한 BCL(Base Class Library) 과 같은 역할을 한다고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 플러그인 모델(Plugin Model)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;MEF &lt;/span&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;는 플러그인 모델(Plugin Model) 이라고도 부릅니다.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; 플러그인 모델을 잘 모르신다면, 전기 콘센트의 플러그를 연상하시면 됩니다. 전기 콘센트의 플러그는 그 수가 제한되어 있지만 어댑터를 추가로 구매하여 꽃으면 몇 개의 콘센트를 꽃을 수 있습니다. 그리고 TV 나 컴퓨터를 사용하고 싶다면 콘센트에 꽃기만 하면 TV 와 컴퓨터를 동작시킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;img src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF1/capture2.jpg&quot; alt=&quot;capture2.jpg&quot; title=&quot;capture2.jpg&quot; style=&quot;&quot; /&gt;&lt;br  /&gt;[그림2] MEF 는 플러그인 모델(Plugin Model) 이다. (출처는 &lt;a href=&quot;http://blog.naver.com/moisenne?Redirect=Log&amp;amp;logNo=50008214345&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;font color=&quot;#d56600&quot; face=&quot;&quot;&gt;여기&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;만약 더 좋은 TV 나 컴퓨터가 생겼다면 플러그를 빼고 더 좋은 TV 나 컴퓨터의 플러그를 콘센트에 꽂기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이처럼 MEF 는 어플리케이션의 확장을 위한 보다 유연한 아키텍처를 제공하며, 약간의 개념만 이해한다면 사용하기도 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;어디서 많이 본 듯한 아키텍처?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;맞습니다. 저도 MEF 를 처음 보는 순간 느꼈습니다. MEF 의 외관은 마치 DI(Dependency Injection) 과 IoC(Inversion of Control) 의 그것과 매우 유사해 보였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none&quot; border=&quot;1&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #d9d9d9 1pt solid; BORDER-LEFT: #d9d9d9 1pt solid; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #eaeaea; BORDER-TOP: #d9d9d9 1pt solid; BORDER-RIGHT: #d9d9d9 1pt solid; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;용어 설명&lt;/font&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;DI(Dependency Injection) / 의존성 주입&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;객체간의 의존성과 결합도를 낮추기 위한 기술&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;IoC(Inversion of Control) / 역제어&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;인스턴스의 관리를 컨테이너에서 인스턴스의 생성과 소멸의 생명주기를 관리&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;하지만 MEF 는 DI 나 IoC 와 전혀 다릅니다. 위에서 얘기한대로 MEF 는 플러그인 모델입니다. &lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;어플리케이션의 확장을 위한 프레임워크이며, DI 와 IoC 는 잊어버리십시오! 아래의 단원에서 DI 와 IoC 를 잊을 수 있는 분명한 근거를 설명하도록 하겠습니다.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;플러그인 모델(Plugin Model) 로 뭘 할 수 있나요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;MEF 의 플러그인 모델(Plugin Model) 은 보다 나은 확장성을 제공해 줍니다. 마치 Visual Studio 의 Addin 을 연상하시면 됩니다. Visual Studio Addin 은 Visual Studio 의 기능을 쉽고 강력하게 활용할 수 있도록 도와주며 전혀 새로운 기능을 추가할 수 있는 플러그인(Plugin) 입니다. 그럼 MEF 의 플러그인 모델(Plugin Model) 은 어떠한 장점이 있을까요?&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;MEF 의 플러그인 모델은 아래와 같은 장점을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;확장 기능에 대한 인스턴스를 생성하는 방법(SingleCall, Singleton)을 제공하며, 인스턴스의 회수할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;상호작용을 할 수 있습니다. 확장 기능간에 메시지의 전달이 쉽고 용이해야 합니다. Global Service 처럼 상호간의 인터페이스가 제공되어야 하고 이러한 메시지에 응답할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;확장 기능은 Lazy Load 할 수 있어야 합니다. 확장 기능은 원하는 시기에 로드해야 합니다. 마치 VSIP(Visual Studio Integration Package) 의 VSCT 와 같이 인터페이스나 이벤트는 노출이 되어 있지만 실제로 확장 기능이 로드된 것은 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;확장이 용이해야 합니다. 예를 들어, 확장 기능이 특정 폴더(Addin 폴더라고 가정)로 복사된다면 이를 감지하여 인터페이스를 제공하거나 확장 기능이 활성화 되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-INDENT: -20pt; MARGIN: 0cm 0cm 0pt 40pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Wingdings&quot;&gt;&lt;font size=&quot;2&quot;&gt;l&lt;/font&gt;&amp;nbsp;&lt;/span&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;교체가 쉬워야 합니다. 새로운 기능이 추가된 확장 기능은 교체가 쉬워야 하며, 필요 없어진 확장 기능을 언로드(Unload) 할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 여러분의 정적인 어플리케이션에 동적인 생명력을 불어넣어 줄 수 있으며, 그 근간은 바로 플러그인 모델(Plugin Model) 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;이러한 플러그인 모델은 근본적인 상호간의 의존(Dependency) 관계를 보다&amp;nbsp;자연스럽게 해결할 수 있으며,&amp;nbsp;유연하고 매끄럽게 다룰 수 있을 것으로 기대합니다.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 설치하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 .NET Framework 4.0 에 포함될 예정입니다. 하지만 아쉽게도 .NET Framework 4.0 CTP 버전에는 포함되어 있지 않기 때문에 Visual Studio Team System 2010 의 VPC 이미지에서도 테스트할 수 있는 환경이 갖추어지지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;현재 2009-03-16 기준으로 MEF 는 Preview 4 버전이며 CodePlex 에서 소스코드와 바이너리를 다운로드 받을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none&quot; border=&quot;1&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: #d9d9d9 1pt solid; BORDER-LEFT: #d9d9d9 1pt solid; PADDING-BOTTOM: 5.4pt; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #eaeaea; BORDER-TOP: #d9d9d9 1pt solid; BORDER-RIGHT: #d9d9d9 1pt solid; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;MEF (Managed Extensibility Framework) &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;다운로드&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;a href=&quot;http://mef.codeplex.com/&quot; target=&quot;_blank&quot;&gt;http://mef.codeplex.com/&lt;/a&gt; &lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color=&quot;#c00000&quot; size=&quot;5&quot; face=&quot;맑은 고딕&quot;&gt;시작이 반이다! 친절한 HelloWorld 따라하기&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;font size=&quot;2&quot;&gt;자… 이제 MEF 도 설치했고 언제나 그렇듯 HelloWorld 를 콘솔에 출력하는 코드를 작성해 보도록 합시다. 소스 코드에 대한 설명은 다음 단원으로 넘기도록 하고, 오늘은 MEF 가 어떻게 동작하는지 눈대중만 익히시면 될 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;BORDER-COLLAPSE: collapse&quot; border=&quot;0&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM-COLOR: #f0f0f0; PADDING-BOTTOM: 5.4pt; BORDER-TOP-COLOR: #f0f0f0; PADDING-LEFT: 5.4pt; WIDTH: 611.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #ffffcc; BORDER-RIGHT-COLOR: #f0f0f0; BORDER-LEFT-COLOR: #f0f0f0; PADDING-TOP: 5.4pt&quot; vAlign=&quot;top&quot; width=&quot;815&quot;&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Collections.Generic;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Linq;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Text;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.Reflection;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.ComponentModel.Composition;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; System.ComponentModel.Composition.Hosting;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;; COLOR: blue&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt; ConsoleApplication1&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Program&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Main(&lt;span style=&quot;COLOR: blue&quot;&gt;string&lt;/span&gt;[] args)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Component&lt;/span&gt; com = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Component&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; catalog = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AggregateCatalog&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catalog.Catalogs.Add(&lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/span&gt;.GetExecutingAssembly()));&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; container = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;var&lt;/span&gt; batch = &lt;span style=&quot;COLOR: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;CompositionBatch&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(com);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Compose(batch);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; com.HelloWorldComponent.Say();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Component&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Import&lt;/span&gt;]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt; HelloWorldComponent { &lt;span style=&quot;COLOR: blue&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;COLOR: blue&quot;&gt;set&lt;/span&gt;; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;COLOR: #2b91af&quot;&gt;Export&lt;/span&gt;(&lt;span style=&quot;COLOR: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;))]&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;HelloWorld&lt;/span&gt; : &lt;span style=&quot;COLOR: #2b91af&quot;&gt;IHelloWorld&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: blue&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;void&lt;/span&gt; Say()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;COLOR: #a31515&quot;&gt;&quot;Hello MEF&quot;&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;TEXT-ALIGN: left; WORD-BREAK: keep-all&quot; align=&quot;left&quot;&gt;&lt;span style=&quot;FONT-FAMILY: &apos;Bitstream Vera Sans Mono&apos;&quot;&gt;&lt;font size=&quot;2&quot;&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;출력 결과는&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;맑은 고딕&quot;&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;img src=&quot;http://blog.powerumc.kr/upload/Image/NET/NET-Framework/MEF1/capture3.jpg&quot; alt=&quot;capture3.jpg&quot; title=&quot;capture3.jpg&quot; style=&quot;&quot; /&gt;&lt;br  /&gt;[그림3] 소스 코드 실행 결과&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;COLOR: #c00000&quot;&gt;혹자는 HelloWorld 를 찍는데 왜 이렇게 많은 코드가 필요한가에 불만이 있을지도 모릅니다.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; 맞습니다. 단순히 결과가 HelloWorld 가 출력되기만 바란다면 이렇게 긴(?) 코드는 필요가 없을지도 모릅니다. 하지만 위의 소스 코드는 보다 큰 어플리케이션을 만들기 위한 초석이며 실제로 큰 어플리케이션에서는 훨씬 적은 코드로 복잡한 요구사항을 구현할 수 있을지도 모르는 일입니다^^&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=&quot;5&quot;&gt;&lt;font color=&quot;#c00000&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;MEF 는 아직은 Preview&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;언제나 그렇듯이 새로운 프레임워크는 새로운 패러다임을 가져옵니다. 그리고 보다 나은 아키텍처와 개발 방법을 제시합니다. 물론 MEF 도 더 깊이 살펴볼수록 그 놀라운 기능에 감탄을 하게 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size=&quot;2&quot;&gt;&lt;font face=&quot;맑은 고딕&quot;&gt;하지만 아직 MEF 는 Preview 입니다. MEF 의 플러그인 모델은 충분히 활용 가치가 있지만 아직은 실무에서 즉시 도입하기엔 많은 고민이 따를 것 같습니다. 그리고 이런 애로 사항이 아마로 정식 버전에서는 해결되리라 생각합니다. 시간이 되면 이 부분도 한번 다루어 보도록 하겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="MEF"/>
            
   </entry>
   <entry>
      <title>System.AddIn Scenarios</title>
      <id>http://www.zemna.net/133585</id>
      <published>2009-07-22T14:47:27+09:00</published>
      <updated>2009-07-22T14:47:27+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133585"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133585#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;FONT size=2&gt;출처 : &lt;A href=&quot;http://msmvps.com/blogs/kathleen/archive/2008/01/14/system-addin-scenarios.aspx&quot;&gt;http://msmvps.com/blogs/kathleen/archive/2008/01/14/system-addin-scenarios.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;BR&gt;
&lt;H5&gt;&lt;FONT size=5&gt;System.AddIn Scenarios&lt;/FONT&gt; &lt;/H5&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;I started writing an entry about the System.AddIn pipeline and realized that post was not helpful without having a clue why you might be interested in System.AddIn. So, let me start here.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;System.AddIn is designed to isolate portions of your application. It was designed for the scenario of AddIns. Despite the naming confusion, this has &lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;&lt;U&gt;nothing&lt;/U&gt;&lt;/I&gt;&lt;/B&gt; to do with Visual Studio. System.AddIn is all about extending &lt;B style=&quot;mso-bidi-font-weight: normal&quot;&gt;&lt;I style=&quot;mso-bidi-font-style: normal&quot;&gt;&lt;U&gt;your&lt;/U&gt;&lt;/I&gt;&lt;/B&gt; application.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;Let’s say you have a commercial application and some clients want to do extra stuff. Giving them back channel access to your database should give you an anxiety attack. With System.AddIn, you just build interfaces with very specific access to your business layer in a way you control. You create an API, and System.AddIn manages it for you. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Understand – with System.Addin and your API, later programmers do not alter your code. They do not even recompile or have the source code. They access your application on channels you define. And you can sandbox them as much as you like. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Don’t yawn. System.AddIn manages application domain boundaries so poorly behaved add-ins don’t crash your application making you look bad. That sand boxing thing is pretty important if there are third parties involved. And System.AddIn assumes your application and the add-in will independently version. You can version in a way that won’t break applications clients or third parties wrote for your application.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Actually, yes, you could have done all this yourself. .NET 3.5 sits on top of 2.0 so I know of nothing changed in the CLR that suddenly opens a new day. You could have written HashSet as well. Heck, there’s a lot in the framework you could have done yourself. But why would you want to. System.AddIn has Microsoft’s backing and commitment so it’s the way to provide application extensibility to your application going forward. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;I believe System.AddIn is important beyond retail applications. Here are a few key scenarios:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1&quot; class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT size=3 face=Calibri&gt;1.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;You need to let your clients or third parties add functionality&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1&quot; class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT size=3 face=Calibri&gt;2.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Internally, you need to logically branch your application for multiple client’s business logic&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1&quot; class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT size=3 face=Calibri&gt;3.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Different clients need different WPF user interfaces&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1&quot; class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT size=3 face=Calibri&gt;4.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;You need to unload code so it can be changed without closing the application &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1&quot; class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT size=3 face=Calibri&gt;5.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Different segments of your application will evolve at different rates&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1&quot; class=MsoListParagraphCxSpLast&gt;&lt;SPAN style=&quot;mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin&quot;&gt;&lt;SPAN style=&quot;mso-list: Ignore&quot;&gt;&lt;FONT size=3 face=Calibri&gt;6.&lt;/FONT&gt;&lt;SPAN style=&quot;FONT: 7pt &apos;Times New Roman&apos;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Interacting with a semantic based organization wide service bus &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The second and third are similar, but I wanted to call out the fact that the WinForms model does not play well with System.AddIn. There is a workaround on the team blog involving hosting WinForm pieces in WPF on both sides. I haven’t done that yet but it looks like an interesting approach. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The fourth one is what drew me to System.AddIn. The new version of my code generation harness will have the best possible support for VB 9 XML Literal Code Generation. This means templates will be in assemblies and you’ll want to load the harness, run, change templates, run again. Stopping the harness for a small change would be a major pain. I need to unload after each harness run. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;That’s not the only time I’ve wanted to unload an assembly. The last time was when we rejected doing customization through satellite assemblies because we could not update them without shutting down the application – and users would be updating localization strings on the fly. Honestly, we’d probably have a tough time anyway because satellite assemblies aren’t setup to run through System.AddIn and you would not want the hit of crossing the isolation boundaries. But we didn’t explore further because updating at runtime of any assembly required app domain isolation which brings in a slew of issues that the CLR team solved with System.AddIn. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The fifth will probably be the most important role of System.AddIn to most programmers within the next few years. One of the side benefits of services is that they allow independent evolution of different segments of your applications, with the corresponding versioning challenges. But what if you are working with an app that does not need service boundaries for deployment, or needs independent evolution within a single service boundary? Why use WCF if what you really need is versioning support? The concept of what an application is has changed in service based world, System.AddIn allows that same shift in thinking without service boundaries – it’s a different kind of API boundary. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;I’m going to postpone discussing the last until I can do a really good job of it, and let my friend &lt;A href=&quot;http://semanticarts.com/Default.aspx?tabid=2165&quot;&gt;David McComb&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;look over it. Dave expanded my view of coding in the most amazing way because of his insights on the range of the ecosystem from assembly bytes to organizations. I’d darn near work for free if I get another chance to work for Semantic Arts. My fingers are just itching to keep going on this…but I really need to wait and do it right.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;These are some good reasons to keep an eye on System.Addin. There may be more. Prior to the &lt;A href=&quot;http://www.codeplex.com/clraddins&quot;&gt;PipelineBuilder&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;release, System.AddIn was such a pain to use that I couldn’t recommend it. The beauty is that System.AddIn went from an absolute pain to downright easy in one day. It’s a tool you should understand for your arsenal, especially if you claim to be anything resembling an architect. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0in 0in 10pt&quot; class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Look for more in upcoming posts…&lt;/FONT&gt;&lt;/P&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Separate Datasets from TableAdapters</title>
      <id>http://www.zemna.net/133550</id>
      <published>2009-06-08T16:03:48+09:00</published>
      <updated>2009-06-08T16:03:48+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133550"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133550#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;H1&gt;&lt;A href=&quot;http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/05/19/OrcasDatasets.aspx&quot;&gt;&lt;FONT size=2&gt;http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/05/19/OrcasDatasets.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Orcas Datasets - Separate Datasets from TableAdapters&lt;/H1&gt;
&lt;P&gt;In Visual Studio 2005, we were introduced to the new DataSet Designer, that also generated a TableAdapter for each DataTable in the DataSet.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%5B2%5D.jpg&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; border=0 alt=&quot;Orcas Datasets - Separate Datasets from TableAdapters&quot; src=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer_thumb.jpg&quot; width=268 height=333&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Along with this great way of creating Data Access Layer for easily, there was a big problem.&amp;nbsp;The Table adapters and the generated Data set&amp;nbsp;are inseparatable which means that when you expose your business entities to the client side or another services, you also expose your data access layer with the connection info inside. This is both a security issue and a software engineering problem.&lt;/P&gt;&lt;A href=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%20generated%20code%5B2%5D.jpg&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; border=0 alt=&quot;Orcas Datasets - Separate Datasets from TableAdapters&quot; src=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%20generated%20code_thumb.jpg&quot; width=624 height=212&gt;&lt;/A&gt; 
&lt;P&gt;After receiving some feedback about these problems,&amp;nbsp;Visual Studio &quot;Orcas&quot; can help us with that. The new DataSet Designer has a new property called DataSet Project,&amp;nbsp;that lets you specify a project in which the generated DataSet and table will be created.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%20dataset%20project%5B2%5D.jpg&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; border=0 alt=&quot;Orcas Datasets - Separate Datasets from TableAdapters&quot; src=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%20dataset%20project_thumb.jpg&quot; width=485 height=370&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;With this feature you can easily separate between the Data Access Layer components (the Table Adapters) and the generated business entities. This can help you expose your business entities without exposing your DAL and your connection info.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%20after%20separation%5B2%5D.jpg&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; border=0 alt=&quot;Orcas Datasets - Separate Datasets from TableAdapters&quot; src=&quot;http://blogs.microsoft.co.il/blogs/bursteg/WindowsLiveWriter/ADO.NetOrcasNewFeature1SeparateDatasetsf_A849/Dataset%20Designer%20after%20separation_thumb.jpg&quot; width=402 height=202&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Team Foundation Server and Windows SharePoint Services SP2</title>
      <id>http://www.zemna.net/133530</id>
      <published>2009-05-17T16:59:02+09:00</published>
      <updated>2009-05-17T16:59:24+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133530"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133530#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;P&gt;If you install Windows SharePoint Services SP2, you may receive a TF31002 (Unable to connect) error. This is because SP2 disables NTLM authentication on the default site virtual server in favor of using Kerberos authentication. &lt;/P&gt;
&lt;P&gt;To use a script to enable NTLM authentication on the virtual server, follow these steps: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;On the application tier computer, open a Command Prompt in the&amp;nbsp;root folder&amp;nbsp;of the system drive&amp;nbsp;and change directory to the \inetpub\adminscripts directory (for example, C:\inetpub\adminscripts). 
&lt;LI&gt;Type the following command, and then press ENTER:&lt;/LI&gt;&lt;/OL&gt;
&lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot; dir=ltr&gt;
&lt;P&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #d3d3d3&quot; face=&quot;Courier New&quot;&gt;cscript adsutil.vbs get w3svc/1/NTAuthenticationProviders&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;The virtual server ID number of the Default Web site in IIS is 1.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;OL&gt;
&lt;LI value=3&gt;To enable NTLM authentication on the virtual server, type the following command, and then press ENTER:&lt;/LI&gt;&lt;/OL&gt;
&lt;BLOCKQUOTE style=&quot;MARGIN-RIGHT: 0px&quot; dir=ltr&gt;
&lt;P&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #d3d3d3&quot; face=&quot;Courier New&quot;&gt;cscript adsutil.vbs set w3svc/1/NTAuthenticationProviders &quot;NTLM&quot;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;OL&gt;
&lt;LI value=4&gt;Restart IIS.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;For more information, see this KB article: &lt;A href=&quot;http://support.microsoft.com/?id=832769&quot;&gt;http://support.microsoft.com/?id=832769&lt;/A&gt;&lt;/P&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>오라클에서 Date vs. Number(or Varchar2)</title>
      <id>http://www.zemna.net/133526</id>
      <published>2009-05-13T10:33:58+09:00</published>
      <updated>2009-05-13T10:35:02+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133526"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133526#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;FONT face=Arial&gt;출처 : &lt;/FONT&gt;&lt;A href=&quot;http://ukja.tistory.com/131&quot;&gt;&lt;FONT face=Arial&gt;http://ukja.tistory.com/131&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;&lt;BR&gt;날짜를 표현하는 데이터 타입으로 Date를 사용해야 하는가? 혹은 Number나 Varchar2를 사용해야하는가?&lt;/SPAN&gt;라는 해묵은 논쟁이 있다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&quot;너무나 간단하지 않은가?&quot;라고 반문하겠지만, 의의로 적용되는 상황을 보면 그리 쉬운 질문은 아닌거 같다. 여러가지 판단 기준이 있겠지만, 가장 중요한 기준은 이것이어야 한다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(255,242,0) 1px dotted; BORDER-LEFT: rgb(255,242,0) 1px dotted; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(255,255,204); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(255,242,0) 1px dotted; BORDER-RIGHT: rgb(255,242,0) 1px dotted; PADDING-TOP: 10px&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif; FONT-WEIGHT: bold&quot;&gt;&quot;어느 쪽이 CBO가 더 이해하기 쉬운가?&quot; &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif; FONT-WEIGHT: bold&quot;&gt;&lt;/DIV&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;이 기준으로 생각하면 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;선택은 언제나 Date 타입&lt;/SPAN&gt;이어야 한다. 거의 반론의 여지가 없다고 본다. 간단한 테스트를 통해 확인해보자.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(247,247,247); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 10px&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;drop table t1 purge;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;create table t1 (&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; c_date &amp;nbsp; &amp;nbsp;&amp;nbsp; date,&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; c_char &amp;nbsp; &amp;nbsp;&amp;nbsp; varchar2(8),&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; c_numb &amp;nbsp; &amp;nbsp;&amp;nbsp; number&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;);&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;-- &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;1,000일간의 데이터&lt;/SPAN&gt;를 생성한다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;-- 동일한 데이터를 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;Date, Varchar2, Number&lt;/SPAN&gt; 타입으로 생성한다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;insert into t1&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; sysdate - level,&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; to_char(sysdate-level, &apos;yyyymmdd&apos;),&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; to_number(to_char(sysdate-level,&apos;yyyymmdd&apos;))&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; dual&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;connect by level &amp;lt;= 1000&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;-- Date와 Number 기준으로 2007년 10월 1일 ~ 2008년 5월 1일까지의 범위를 구한다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;with v as (&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; max(c_date) as max_date, min(c_date) as min_date,&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; max(c_char) as max_char, min(c_char) as min_char,&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; max(c_numb) as max_numb, min(c_numb) as min_numb,&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; count(*) as total_rows&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; t1&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;)&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; total_rows * &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; &amp;nbsp; (to_date(&apos;20080501&apos;,&apos;yyyymmdd&apos;)-to_date(&apos;20071001&apos;,&apos;yyyymmdd&apos;))&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; /(max_date - min_date) as diff_d,&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; total_rows * (20080501-20071001) / (max_numb-min_numb) as diff_n&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; v&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; &amp;nbsp; DIFF_D &amp;nbsp; &amp;nbsp; DIFF_N &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;---------- ---------- &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace; FONT-WEIGHT: bold&quot;&gt;213.213213 319.919178 &amp;nbsp; &amp;lt;-- 날짜는 213일이지만, 숫자값으로는 320만큼 차이가 난다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;/DIV&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;이제 다음과 같이 각 데이터 타입별로 2007년 10월 1일 ~ 2008년 5월 1일까지의 날수를 누가 더 정확하게 표현하는지 확인해본다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(247,247,247); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 10px&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;-- Date 타입&lt;BR&gt;explain plan for&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select * &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from t1&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;where &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; c_date between to_date(&apos;20071001&apos;,&apos;yyyymmdd&apos;) and&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; to_date(&apos;20080501&apos;, &apos;yyyymmdd&apos;)&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;@plan&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;-- Varchar2 타입&lt;BR&gt;explain plan for&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select * &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from t1&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;where &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; c_char between &apos;20071001&apos; and&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &apos;20080501&apos;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;@plan&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;-- Number 타입&lt;BR&gt;explain plan for&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select * &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from t1&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;where &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; c_numb between 20071001 and&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 20080501&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;@plan&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;결과는 다음과 같다(Cardinality의 차이에 주의하자)&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(247,247,247); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 10px&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace; FONT-WEIGHT: bold&quot;&gt;-- Date 타입인 경우&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| Id&amp;nbsp; | Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Name | Rows&amp;nbsp; | Bytes | Cost (%CPU)| Time &amp;nbsp; &amp;nbsp; |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| &amp;nbsp; 0 | SELECT STATEMENT&amp;nbsp; | &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; 215 |&amp;nbsp; 4945 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;|*&amp;nbsp; 1 |&amp;nbsp; TABLE ACCESS FULL| T1 &amp;nbsp; | &amp;nbsp; &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;215 &lt;/SPAN&gt;|&amp;nbsp; 4945 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace; FONT-WEIGHT: bold&quot;&gt;-- Varchar2 타입인 경우&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| Id&amp;nbsp; | Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Name | Rows&amp;nbsp; | Bytes | Cost (%CPU)| Time &amp;nbsp; &amp;nbsp; |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| &amp;nbsp; 0 | SELECT STATEMENT&amp;nbsp; | &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; 321 |&amp;nbsp; 7383 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;|*&amp;nbsp; 1 |&amp;nbsp; TABLE ACCESS FULL| T1 &amp;nbsp; | &amp;nbsp; &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;321 &lt;/SPAN&gt;|&amp;nbsp; 7383 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace; FONT-WEIGHT: bold&quot;&gt;-- Number 타입인 경우&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| Id&amp;nbsp; | Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | Name | Rows&amp;nbsp; | Bytes | Cost (%CPU)| Time &amp;nbsp; &amp;nbsp; |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| &amp;nbsp; 0 | SELECT STATEMENT&amp;nbsp; | &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; 321 |&amp;nbsp; 7383 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;|*&amp;nbsp; 1 |&amp;nbsp; TABLE ACCESS FULL| T1 &amp;nbsp; | &amp;nbsp; &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;321 &lt;/SPAN&gt;|&amp;nbsp; 7383 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;--------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;/DIV&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR&gt;위의 결과를 보면 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;오직 Date 타입을 사용한 경우에만 실제 데이터 분포를 합리적으로 해석&lt;/SPAN&gt;하는 것을 알 수 있다. 이유는 간단하다. &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;CBO가 &quot;날짜&quot;를 &quot;날짜&quot;로 해석&lt;/SPAN&gt;할 수 있기 때문이다. &lt;BR&gt;(Oracle이 예측한 Cardinality가 우리가 Min/Max를 이용해 구한 값과 거의 일치하는 것에 유의하자)&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;반면 Number나 Vachar2 타입을 사용한 경우에는 &quot;날짜&quot;로 해석할수 없기 때문에 단순히 범위만을 고려한 값을 예측하게 된다. 이런 차이들이 실행 계획의 합리성을 결정하기 때문에 그 효과는 하늘과 땅 차이라 하겠다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;하지만, 여기서 다시 한번 이런 복잡한 질문을 던질 수 있다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(255,242,0) 1px dotted; BORDER-LEFT: rgb(255,242,0) 1px dotted; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(255,255,204); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(255,242,0) 1px dotted; BORDER-RIGHT: rgb(255,242,0) 1px dotted; PADDING-TOP: 10px&quot;&gt;&quot;지난 몇 년 동안 날짜를 표현하는데 Varchar2나 Number를 사용해왔지만, 아무런 문제도 없었다. 이것은 어떻게 해석할 것인가?&quot;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;답변은 운이 좋았거나, Bind 변수를 사용했기 때문&lt;/SPAN&gt;이라는 것이다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;Oracle은 다음과 같이 Between Range 조건을 Bind 변수로 사용한 경우에는&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt; 0.25%&lt;/SPAN&gt;라는 고정된 값을 Selectivity(선택도)로 사용한다. &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;(이것은 단일 Range 조건이 5%의 선택도를 사용하기 때문이다. Between Range 조건(And 조건의 일종)은 5%*5% = 0.25%가 된다)&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(247,247,247); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 10px&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;explain plan for&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;select * &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;from t1&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;where &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&amp;nbsp;&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt; c_numb between :b1 and&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace; FONT-WEIGHT: bold&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace; FONT-WEIGHT: bold&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :b2&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;@plan&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| Id&amp;nbsp; | Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | Name | Rows&amp;nbsp; | Bytes | Cost (%CPU)| Time &amp;nbsp; &amp;nbsp; |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; | &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp; 3 | &amp;nbsp;&amp;nbsp; 69 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;|*&amp;nbsp; 1 |&amp;nbsp; FILTER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;|*&amp;nbsp; 2 | &amp;nbsp; TABLE ACCESS FULL| T1 &amp;nbsp; | &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;3 &lt;/SPAN&gt;| &amp;nbsp;&amp;nbsp; 69 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)| 00:00:01 |&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &apos;courier new&apos;, courier, monospace&quot;&gt;---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;전체 Row수가 1,000개 이므로&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt; 1,000*0.0025 = 2.5 = 3&lt;/SPAN&gt;이 되는 것을 알 수 있다.&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;아마 예외없이 Bind 변수를 사용함으로써 항상 고정된 Cardinality가 나왔을 것이고, 이로 인해 잘못된 데이터 타입으로 인한 부작용을 확인할 길이 없었을 것이다. &lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: verdana, arial, helvetica, sans-serif&quot;&gt;Range Predicate는 Histogram과 더불어 CBO에게 가장 골치아픈 문제 중 하나이다.&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt; 오라클을 오라클답게 사용하려면 선택의 기준을 항상 &quot;CBO에게&quot; 맞추는 습관&lt;/SPAN&gt;이 필요할 것이다.&lt;/SPAN&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>네트워크에서 rewirte 에 대한 기본 개념</title>
      <id>http://www.zemna.net/133524</id>
      <published>2009-05-12T18:59:43+09:00</published>
      <updated>2009-05-12T18:59:43+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133524"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133524#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;SPAN style=&quot;TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 13px/20px Gulim; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(85,85,85); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0&quot; class=Apple-style-span&gt; 
&lt;DIV style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px&quot;&gt;IPv4에서의 IP 주소 체제의 만점과 몇 가지 보안상의 이유로, 점점 더 많은 네트워크들이 외부 네트워크(또는 인터넷)에서 사용될 수 없는 개인용도의 IP 주소체제(private IP addresses)를 사용한다. 내부 네트워크의 호스트가 인터넷에 접근하려 할 때나, 인터넷에서 접근되도록 하러할 때, 네트워크 주소 번역(network address translation)의 필요성이 생긴다. 네트워크 주소 번역은 인터넷 전송 규약의 헤더들(headers)이 적절히 수정되어, 클라이언트들이 각기 다른 서버들에 연결되었지만 하나의 IP 주소와 연결되고 있는 것처럼 보이고, 서버들도 클라이언트에 직접 연결된 듯 보이도록 할 수 있다는 사실에 의지한다. 이러한 성질은 가상서버 즉, 다른 IP 주소에서의 병렬 서비스들이 NAT에 의한 하나의 IP 주소위에, 하나의 가상 서비스로 보이도록 할 수 있는 서버를 구축하는데 이용될 수 있다.&lt;/DIV&gt;
&lt;DIV style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px&quot;&gt;NAT에 의한 가상 서버의 구조는&amp;nbsp; load balancer와 실제 서버들은 스위치(switch)나 허브(hub)로 상호 연결되어있다. 실제 서버들은 대개 같은 서비스를 운용하고 같은 서비스 구성 항목을 가진다. 서비스 내용은 각 서버의 하드디스크(local disk)에 복제되거나, 네트워크 파일 시스템으로 공유되거나, (ASF나 CODA같은) 분산 파일 시스템으로 제공된다. load balancer는 request들을 NAT에 의해 다른 실제의 서버들로 전송(dispatch)한다.&lt;/DIV&gt;
&lt;DIV style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px&quot;&gt;NAT에 의한 가상 서버의 작업 흐름은 다음과 같다: 사용자가 서버 클러스터가 제공하는 서비스에 접근하면 가상 IP 주소(Load Balancer의 외부 IP 주소)로 향하는 패킷(request packet)이 Load Balancer에 도달한다. 그러면 Load Balancer는 그 패킷의 목적지 주소와 포트 번호를 검사한다. 만일 그것들이 가상 서버의 역할 분류표(virtual server rule table)에 따른 가상 서버 서비스와 일치한다면 작업할당방식(scheduling algorithm)에 따라 클러스터로부터 실제 서버를 선택하고, 이 접속을 모든 성립된 접속들(established connections)을 기록하는 해쉬 테이블(hash table)에 추가해 넣는다.&lt;SPAN class=Apple-converted-space&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px&quot; color=#ff0000&gt;&lt;STRONG style=&quot;PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px&quot;&gt;그 후 그 패킷의 목적지 주소와 포트 번호를 선택된 서버의 것으로 변경(rewrite)한다&lt;/STRONG&gt;&lt;/FONT&gt;. 그러면, 그 패킷은 선택된 서버로 전송된다. 해쉬 테이블에서 발견된 접속에 속하는 패킷이 들어온다면 그 패킷은 변경(rewrite)되어 해당 서버로 전송된다. 응답 패킷(reply packet)이 돌아오면, Load Balancer는 그 패킷의 발생지 주소(source address)와 포트를 가상 서비스의 것으로 변경(rewrite)한다. 접속이 종료하거나 시간 초과되면 접속기록은 해쉬 테이블에서 지워진다.&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Extension 클래스를 통해 기존 클래스를 확장하기</title>
      <id>http://www.zemna.net/133520</id>
      <published>2009-05-11T21:18:58+09:00</published>
      <updated>2009-05-11T21:19:45+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133520"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133520#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;P&gt;C# 3.0 에서부터 새로 제공되는 기능으로 Extensions 라는 것이 있다.&lt;BR&gt;&lt;BR&gt;이 것은 기존에 정의되어 있는 클래스를 확장할 수 있도록 해주는 방법이라고 할 수 있다. 백문이 불여일견이니 어떻게 하는지 한번 살펴보도록 하겠다.&lt;/P&gt;
&lt;P&gt;일단 먼저 기본으로 제공되는 String에 현재의 문자열의 길이를 리턴해주는 GetStringLength() 라는 함수를 제공하도록 해보겠다.&lt;/P&gt;
&lt;P&gt;프로젝트를 하나 생성하고 StringExtensions 라는 이름의 클래스를 하나 추가한 후 아래와 같이 코딩하도록 하자. &lt;BR&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;StringExtensions.cs&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;namespace ExtensionMethodTest
{
    public static class StringExtensions
    {
        public static int GetTextLength(this string s)
        {
            return s.Length;
        }
    }
}&lt;/pre&gt;
&lt;P&gt;이와 같이 코딩한 후 폼을 하나 추가하고 폼에서 String 변수를 하나 생성해서 아래와 같이 코딩하도록 하자.&lt;BR&gt;&lt;/P&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;Form1.cs&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Windows.Forms;

namespace ExtensionMethodTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string message = &quot;Hello~~~~~&quot;;
            MessageBox.Show(message.GetTextLength().ToString());
        }
    }
}
&lt;/pre&gt;
&lt;P&gt;위와 같이 string 함수에 위에서 정의한 함수가 확장되어 들어가 있는 것을 볼 수 있다.&lt;/P&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Need to make a user control transparent</title>
      <id>http://www.zemna.net/133504</id>
      <published>2009-04-29T10:59:01+09:00</published>
      <updated>2009-04-29T10:59:01+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133504"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133504#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;P&gt;To make your user control transparent, Add code described in three steps&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;Step 1&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x00000020;
        return cp;
    }
}&lt;/pre&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;Step 2&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;protected override void OnPaintBackground(PaintEventArgs e)
{
    // dont code anything here. Leave blank
}&lt;/pre&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;Step 3&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;protected void InvalidateEx()
{
    if (Parent == null)
        return;
    Rectangle rc = new Rectangle(this.Location, this.Size);
    Parent.Invalidate(rc, true);
}
  &lt;/pre&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;After doing 3 steps, place your user control in the form. Its going to be transparents. The controls placed on user control will be visible.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;/div&gt;</content>
                  <category term="배경투명처리"/>
            <category term="Transparent"/>
            <category term="Background"/>
            
   </entry>
   <entry>
      <title>Drag &amp; Drop 기능 구현 기초</title>
      <id>http://www.zemna.net/133500</id>
      <published>2009-04-28T09:04:15+09:00</published>
      <updated>2009-04-28T09:11:12+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133500"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133500#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;드래그 해서 전달하려고 하는 클래스 선언&lt;/STRONG&gt;&lt;BR&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;Class1.cs&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;namespace DragTest
{
    public class Class1
    {
        public int a = 0;
    }
}&lt;/pre&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;드래그(Drag) 하려고 하는 항목에 &lt;FONT color=#8866cc&gt;MouseDown 이벤트&lt;/FONT&gt;를 생성하고 이벤트 내부에 드래그 시작을 알리는 함수 구현&lt;BR&gt;&lt;/STRONG&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;Form2.cs&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;using System;
using System.Windows.Form;

namespace DragTest
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        
        private void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            this.DoDragDrop(new Class1(), DragDropEffects.Copy);
        }
    }
}&lt;/pre&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;드래그한 객체를 받아드릴 컨트롤 또는 폼에&lt;FONT color=#2222cc&gt; AllowDrop 속성&lt;/FONT&gt;을 True로 설정&lt;BR&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;DragEnter 이벤트 구현&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;DragDrop 이벤트 구현&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>.NET Code Converter</title>
      <id>http://www.zemna.net/133475</id>
      <published>2009-04-24T13:08:37+09:00</published>
      <updated>2009-04-24T13:09:52+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133475"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133475#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;.NET 언어인 C#과 VB.NET의 코드를 상호 변환해주는 사이트가 있어 소개하고자 한다.&lt;BR&gt;&lt;BR&gt;&lt;A class=&quot;bold editor_blue_text&quot; onclick=&quot;window.open(this.href);return false;&quot; href=&quot;http://www.developerfusion.com/tools/convert/csharp-to-vb/&quot;&gt;http://www.developerfusion.com/tools/convert/csharp-to-vb/&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;이 사이트로 이동한 다음 원하는 변환 방법을 선택 후 코드를 붙여넣고 하단의 버튼을 누르기만 하면 자동으로 다른 언어의 코드를 생성해 준다.&lt;BR&gt;&lt;BR&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/475/133/DotNet_Code_Converter.jpg&quot; alt=&quot;DotNet_Code_Converter.jpg&quot; title=&quot;DotNet_Code_Converter.jpg&quot; width=&quot;678&quot; height=&quot;1134&quot; style=&quot;solid; border-style: solid; border-width:1px;&quot; /&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;</content>
                  <category term=".NET"/>
            <category term="Code Converter"/>
            <category term="닷넷"/>
            <category term="코드 컨버팅"/>
            <category term="코드 컨버터"/>
            <category term="Convert"/>
            <category term="C#"/>
            <category term="VB.NET"/>
            
   </entry>
   <entry>
      <title>무료료 Subversion + Trac 공간을 제공해주는 사이트</title>
      <id>http://www.zemna.net/133469</id>
      <published>2009-04-23T13:20:50+09:00</published>
      <updated>2009-04-23T13:20:50+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133469"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133469#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;인터넷에서 해외에 무료료 Subversion 및 Trac를 생성해 제공해주는 사이트가 있어 소개하고자 한다.&lt;BR&gt;&lt;BR&gt;&lt;A class=&quot;bold editor_blue_text&quot; onclick=&quot;window.open(this.href);return false;&quot; href=&quot;http://www.assembla.com/&quot;&gt;http://www.assembla.com/&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;위 사이트에서 회원가입 과정을 거친 후 무료로 이용이 가능하다.&lt;BR&gt;&lt;BR&gt;그동안 서버가 없어서 사용해보지 못한 사람들은 이 사이트를 통해서 한번 써보는것도 괜찮을것 같다.&lt;/div&gt;</content>
                  <category term="assembla"/>
            <category term="subversion"/>
            <category term="trac"/>
            
   </entry>
   <entry>
      <title>대한민국 PDF 뷰어! ePapyrus PDF-Pro4</title>
      <id>http://www.zemna.net/133464</id>
      <published>2009-04-23T13:13:24+09:00</published>
      <updated>2009-04-23T13:13:24+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133464"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133464#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;여러가지 다양한 기능을 가지고 있는 국산 PDF 뷰어 프로그램입니다.&lt;BR&gt;&lt;BR&gt;국산답게 독도사랑 및 문화재사람등과 같은 버전도 있습니다.&lt;BR&gt;&lt;BR&gt;특히, 여러개의 PDF문서를 병합해주는 기능은 매우 쓸만합니다. ^^;&lt;BR&gt;&lt;BR&gt;다운로드 : &lt;A class=bold onclick=&quot;window.open(this.href);return false;&quot; href=&quot;http://www.pdfpro.co.kr/download/pdf-pro_free.php&quot;&gt;http://www.pdfpro.co.kr/download/pdf-pro_free.php&lt;/A&gt;&lt;/div&gt;</content>
                  <category term="PDF-Pro4"/>
            <category term="PDF"/>
            
   </entry>
   <entry>
      <title>Visual Studio에서 GAC에 등록한 Assembly가 참조추가에 출력되도록 설정하기</title>
      <id>http://www.zemna.net/133441</id>
      <published>2009-04-22T13:20:53+09:00</published>
      <updated>2009-04-22T14:03:46+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133441"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133441#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;H2&gt;Summary&lt;/H2&gt;When you are developing a class library, you may want Visual Studio .NET to list your library in the Add Reference dialog box on the .NET tab without the user having to browse for it. &lt;BR&gt;&lt;BR&gt;This issue is not resolved if you install your assembly to the global assembly cache, because the Add Reference dialog box is path-based and does not enumerate the components from the global assembly cache.&lt;BR&gt;&lt;BR&gt;To display your assembly in the Add Reference dialog box, you can add a registry key, such as the following, which points to the location of the assembly 
&lt;DIV class=indent&gt;&lt;SPAN class=userInput&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\&lt;VAR&gt;MyAssemblies&lt;/VAR&gt;]@=&quot;C:\\&lt;VAR&gt;MyAssemblies&lt;/VAR&gt;&quot;&lt;/STRONG&gt;&lt;/SPAN&gt; 
&lt;P&gt;where &lt;VAR&gt;MyAssemblies&lt;/VAR&gt; is the name of the folder in which the assemblies reside.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;NOTE&lt;/B&gt;: You can create the this registry entry under the &lt;B&gt;HKEY_LOCAL_MACHINE&lt;/B&gt; hive. This will change the setting for all of the users on the system. If you create this registry entry under &lt;B&gt;HKEY_CURRENT_USER&lt;/B&gt;, this entry will affect the setting for only the current user. &lt;BR&gt;&lt;BR&gt;Restart Visual Studio .NET after you have added the key. &lt;/P&gt;&lt;/DIV&gt;
&lt;H2&gt;More Information&lt;/H2&gt;
&lt;P&gt;It is highly recommended that you &lt;I&gt;not&lt;/I&gt; install your assemblies to the global assembly cache, unless you want to share your assemblies with other applications running on that system. Also, note that it is not possible to directly reference an assembly from the global assembly cache in your project. If you want to use an assembly from the global assembly cache, you should drop your assemblies to a local folder, and then add a reference to the assembly from this folder. You may want to set the &lt;B&gt;Copy Local&lt;/B&gt; property to &lt;B&gt;False&lt;/B&gt; for that assembly if you do not want the assembly to be copied locally to your project folders. At runtime, the application will use the assemblies from the global assembly cache. &lt;BR&gt;&lt;BR&gt;If you install the .NET Framework 3.0 Service Pack 1 (SP1), the following registry subkey is added:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\v3.0&lt;BR&gt;&lt;BR&gt;If you install the .NET Framework 3.5, the following registry subkey is added:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\v3.5&lt;BR&gt;&lt;B&gt;&lt;BR&gt;Note&lt;/B&gt; These registry subkeys are added to support the new functions that are included in Object Browser. For more information about Object Browser, visit the following Microsoft Developer Network (MSDN) Web site: &lt;/P&gt;
&lt;DIV class=indent&gt;&lt;A href=&quot;http://msdn.microsoft.com/en-us/library/exy1facf(VS.71).aspx&quot; target=_blank&gt;http://msdn.microsoft.com/en-us/library/exy1facf(VS.71).aspx&lt;/A&gt;&lt;SPAN class=pLink&gt;&lt;/DIV&gt;
&lt;H2 class=indent&gt;References&lt;/H2&gt;
&lt;P class=indent&gt;For more information about assemblies and the global assembly cache, vist the following MSDN Web site:&lt;BR&gt;&lt;A href=&quot;http://msdn.microsoft.com/en-us/library/yf1d93sz(vs.71).aspx&quot; target=_blank&gt;http://msdn.microsoft.com/en-us/library/yf1d93sz(vs.71).aspx&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;For more information about the &lt;STRONG class=uiterm&gt;Add Reference&lt;/STRONG&gt; dialog box, the following MSDN Web site:&lt;BR&gt;&lt;A href=&quot;http://msdn.microsoft.com/en-us/library/ftcwa60a(vs.71).aspx&quot; target=_blank&gt;http://msdn.microsoft.com/en-us/library/ftcwa60a(vs.71).aspx&lt;/A&gt;&lt;SPAN class=pLink&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/div&gt;</content>
                  <category term="GAC"/>
            <category term="참조추가"/>
            
   </entry>
   <entry>
      <title>GAC(Global Assembly Cache)에 대해 알아보자</title>
      <id>http://www.zemna.net/133432</id>
      <published>2009-04-21T19:52:50+09:00</published>
      <updated>2009-04-21T20:07:07+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133432"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133432#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;span  style=&quot;FONT-SIZE: 16px&quot;&gt;1. GAC란?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GAC(Glocal Assembly Cache)란 마이크로소프트사의 CLR(Common&amp;nbsp;Language Runtime)&amp;nbsp;플랫폼에 도입된 .NET 어샘플리 캐시입니다. 즉, 특수하게 관리되는 중앙 저장소를&amp;nbsp;두는 접근방법을 통해서 예전에 발생했던 DLL 지옥과 같은 문제가 발생하는것을 피하기 위한 공유 라이브러리라고 생각하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GAC에 존재하는 어셈블리들은 강력한 이름으로 서명되어 있기 때문에 동일한 이름이지만 버전이 틀린 여러개의 파일을 동시에 보관할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span  style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;strong&gt;2. GAC의 몇가지 문제점&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Global Assembly Cache 매커니즘은 예전의 DLL 지옥과 같은 문제를 피할 수 있게 해주지만, 아직 몇가지 결점을 가지고 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기본적으로 어플리케이션은 컴파일할때 사용됐었던 .NET Framework 버전이 컴퓨터에 설치가 되어 있어야지만 동작이 가능합니다. 최신 버전의 .NET Framework가 설치되어 있어도 어플리케이션은 동작되지 않습니다.&lt;/li&gt;
&lt;li&gt;만일 어플리케이션에서 사용된 .NET 코어의 몇가지 호출이 framework의 몇가지의 버전만 지원할 경우 Conditional compilation을 사용해야 할 필요가 있습니다.&lt;/li&gt;
&lt;li&gt;네이티브 코드에 의존한 .NET 어플리케이션은 GAC 매커니즘안에서도 호환성에 문제가 발생할 위험이 있습니다.&lt;/li&gt;
&lt;li&gt;GAC에 추가할 모든 어셈블리는 강력한 이름을 가지고 있어야 합니다. 그러나 몇가지 상황에서는 강력한 이름을 생성하는게 매우 힘들수 있습니다. 예를 들자면, 만일 강력한 이름을 가지고 있지않은 어셈플리를 참조하는 어셈블리일 경우 GAC에 등록할 수 없습니다.&amp;nbsp; 만일 서드파티 어셈블리 파일을 개발한 개발자가 강력한 이름으로 어셈블리를 서명하지 않았다면 GAC에 등록하는것이 불가능하게 된다는 뜻입니다.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content>
                  <category term="GAC"/>
            
   </entry>
   <entry>
      <title>Visual Studio 2010의 Code Analysis Enhancements</title>
      <id>http://www.zemna.net/133417</id>
      <published>2009-04-21T09:19:23+09:00</published>
      <updated>2009-04-21T09:20:41+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133417"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133417#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;Visual Studio 2010에서는 기존의 코드분석 기능이 3가지 부분에서 향상이 이루어 졌다고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자세한 사항은 Visual Studio 2010 공식 블로그에서 확인해 보시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://vsts2010.net/39&quot; target=_blank&gt;[Better Code]VSTS 2010 Code Analysis Enhancements - 1.개요&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://vsts2010.net/41&quot; target=_blank&gt;[Better Code]VSTS 2010 Code Analysis Enhancements - 2. Rule Sets Feature&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
                  <category term="VisualStudio"/>
            <category term="VisualStudio 2010"/>
            
   </entry>
   <entry>
      <title>마이크로소프트의 &apos;I am a developer&apos; 사이트</title>
      <id>http://www.zemna.net/133410</id>
      <published>2009-04-20T20:05:33+09:00</published>
      <updated>2009-04-20T20:11:26+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133410"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133410#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;마이크로소프트에서 개발자를 위한 사이트를 하나 제작했다.&lt;BR&gt;&lt;BR&gt;&lt;A class=&quot; editor_blue_text&quot; onclick=&quot;window.open(this.href);return false;&quot; href=&quot;http://www.iamadeveloper.co.kr&quot;&gt;http://www.iamadeveloper.co.kr&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/410/133/iamadeveloper.jpg&quot; alt=&quot;iamadeveloper.jpg&quot; title=&quot;iamadeveloper.jpg&quot; width=&quot;770&quot; height=&quot;599&quot; style=&quot;&quot; /&gt;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;이 사이트에서 개발에 필요한 간단한 정보 및 MIX09에 관한 정보를 얻을 수 있다.&lt;BR&gt;&lt;BR&gt;개발자라면 가끔씩 들려서 새로운 정보를 얻는것도 좋을것 같다.&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>.htaccess 파일을 이용해 특정 IP 접근 차단하기</title>
      <id>http://www.zemna.net/133403</id>
      <published>2009-04-20T09:20:16+09:00</published>
      <updated>2009-04-20T09:20:16+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133403"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133403#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;요즘 댓글, 트랙백 등의 서비스 때문에 서버의 트래픽이 날로 증가하고 있다.&lt;/p&gt;
&lt;p&gt;이럴때 맘에 안드는 스팸 IP를 차단하는 방법이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹서버의 루트폴더에 .htaccess 파일을 생성한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;생성된 파일에 아래와 같이 설정하도록 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SetEnvIfNoCase remote_addr 94.229.65.* go_out&lt;br  /&gt;Order allow,deny&lt;br  /&gt;Allow from all&lt;br  /&gt;Deny from env=go_out&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 하게 되면 94.229.65.* 에 해당하는 아이피가 접근을 시도하게 될 경우 거부하도록 설정할 수 있다.&lt;/p&gt;&lt;/div&gt;</content>
                  <category term=".htaccess"/>
            <category term="접근거부"/>
            
   </entry>
   <entry>
      <title>Make &apos;Sub Main()&apos; function like C#</title>
      <id>http://www.zemna.net/133364</id>
      <published>2009-04-15T12:59:14+09:00</published>
      <updated>2009-04-16T16:50:10+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133364"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133364#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;P&gt;비주얼 베이직 닷넷(이하 VB.NET)에는 프로젝트 속성에 이전 VB처럼 응용프로그램 정보를 설정할 수 있는 기능인 &apos;응용 프로그램 프레임워크 사용&apos; 기능을 가지고 있다.&lt;/P&gt;
&lt;P&gt;VB.NET 프로젝트를 하나 생성한 후 프로젝트 속성을 살펴보도록 하자.&lt;BR&gt;&lt;BR&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/364/133/VBNet_001.png&quot; alt=&quot;VBNet_001.png&quot; title=&quot;VBNet_001.png&quot; class=&quot;iePngFix&quot; width=&quot;770&quot; height=&quot;562&quot; style=&quot;&quot; /&gt; 
&lt;P&gt;
&lt;P&gt;&apos;응용 프로그램&apos; 탭에서 &apos;응용 프로그램 프레임워크 사용&apos; 체크박스를 찾을 수 있다.&lt;/P&gt;
&lt;P&gt;이 항목이 체크되어 있으면 이전 VB와 같은 스타일로 어플리케이션을 손쉽게 설정 할 수 있다는 장점이 있다. 
&lt;P&gt;그러나 응용 프로그램 최초 시작시에 어떤 작업을 해야할 경우, 예를 들자면 폼 스킨을 초기화해야하거나 할 때에 C#에서처럼 static void Main() 함수를 사용해서 프로그램 시작 시점을 잡아야 할 경우가 있다. 
&lt;P&gt;이럴 경우에는 다음과 같은 순서로 작업하면 된다. 
&lt;P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;1. 프로그램에 모듈 1개를 새로 생성한다. 여기에서는 &apos;MyModule&apos; 이라는 이름으로 생성했다.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/364/133/VBNet_002.png&quot; alt=&quot;VBNet_002.png&quot; title=&quot;VBNet_002.png&quot; class=&quot;iePngFix&quot; width=&quot;770&quot; height=&quot;378&quot; style=&quot;&quot; /&gt;&amp;nbsp;&lt;BR&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;2. 생성된 모듈에 C#과 같은 스타일의 Main() 함수를 제작한다. 
&lt;P&gt;&amp;nbsp; 
&lt;P&gt;&lt;/STRONG&gt;&lt;/FONT&gt;Module MyApplication&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;STAThread()&amp;gt; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Sub Main()&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &apos;&amp;nbsp;프로그램 시작시 해야 할 일&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &apos;USkin.USkinSDK.USkinInit(&quot;&quot;, &quot;&quot;, &quot;Theme.msstyles&quot;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &apos;Application.EnableVisualStyles()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.SetCompatibleTextRenderingDefault(False)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.Run(new Form)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;BR&gt;&lt;BR&gt;End Module&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;3. 프로젝트 설정에서 &apos;응용 프로그램 프레임워크 사용&apos; 항목을 체크해제 하고, 위의 시작 개체 항목에서 &apos;Sub Main&apos; 함수를 선택한다.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/364/133/VBNet_003.png&quot; alt=&quot;VBNet_003.png&quot; title=&quot;VBNet_003.png&quot; class=&quot;iePngFix&quot; width=&quot;770&quot; height=&quot;562&quot; style=&quot;&quot; /&gt;&amp;nbsp;&lt;BR&gt;이렇게 하게되면 C#과 동일한 방식으로 프로그램 시작 관련 설정을 할 수 있다.&lt;BR&gt;&lt;/P&gt;&lt;/div&gt;</content>
                  <category term="VB.NET"/>
            <category term="응용프로그램 프레임워크"/>
            <category term="Application Framework"/>
            
   </entry>
   <entry>
      <title>윈도우 폼(Form)에 스킨(Skin)을 입히자! USkin</title>
      <id>http://www.zemna.net/133358</id>
      <published>2009-04-15T12:55:59+09:00</published>
      <updated>2009-04-15T12:55:59+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133358"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133358#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;윈도우 어플리케이션을 제작하면서 자신의 폼에 스킨을 입히고 싶은 경우가 있었을 것이다.&lt;/p&gt;
&lt;p&gt;그러나 상용 컴포넌트를 사용할 수는 없고, 그리자니 너무 힘들고...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이럴때 사용할 수 있는 무료 윈도우 스킨 프로그램이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span  style=&quot;FONT-SIZE: 16px&quot;&gt;&lt;strong&gt;NEEMEDIA - USkin V3.0&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 프로그램은&amp;nbsp;.NET 및 MFC에서도 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단&amp;nbsp;사이트에 방문해서 프로그램을 다운받도록 하자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사이트 링크 : &lt;a href=&quot;http://www.neemedia.com/newsite/index.php?entry=entry081110-153248&quot; target=_blank&gt;http://www.neemedia.com/newsite/index.php?entry=entry081110-153248&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/358/133/USkin.png&quot; alt=&quot;USkin.png&quot; title=&quot;USkin.png&quot; class=&quot;iePngFix&quot; width=&quot;770&quot; height=&quot;454&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로그램을 다운받은 후 압축을 풀어서 데모를 실행해 보도록 하자.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/358/133/USkin_002.png&quot; alt=&quot;USkin_002.png&quot; title=&quot;USkin_002.png&quot; class=&quot;iePngFix&quot; width=&quot;496&quot; height=&quot;386&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이와 같이 스킨이 입혀진 프로그램이 실행되는것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;가장 좋은 점은 msstyles 파일을 로드하여 사용할 수 있다는 점이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</content>
                  <category term="스킨"/>
            <category term="USkin"/>
            
   </entry>
   <entry>
      <title>netstat, tasklist 명령으로 쉽게 할당된 프로그램 찾기</title>
      <id>http://www.zemna.net/133273</id>
      <published>2009-04-03T10:11:51+09:00</published>
      <updated>2009-04-03T10:11:51+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133273"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133273#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;보통 컴퓨터를 사용하는 도중 컴퓨터에서 사용중인 포트를 어느프로그램에서 쓰고 있는지 궁금할 때가 있다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이럴때 보통 &apos;netstat&apos; 명령을 사용해서 각 포트별 프로세스 아이디를 찾아내 확인하고는 했다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Windows XP SP2 이후부터는 이 netstat 명령엉 옵션에 &apos;-b&apos; 가 추가되어 어떤 프로그램에 할당받아 사용하고 있는지 좀 더 손쉽게 확인할 수 있게 되었다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/273/133/netstat.png&quot; alt=&quot;netstat.png&quot; title=&quot;netstat.png&quot; class=&quot;iePngFix&quot; width=&quot;669&quot; height=&quot;438&quot; style=&quot;&quot; /&gt;
&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;위와 같이 &apos;-b&apos; 옵션을 통해 각 포트별 할당된 프로그램명을 알 수 있게 되었다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;또한 윈도우 명령어 중에 tasklist 라는 명령어가 있다.&lt;/div&gt;&lt;div&gt;우리가 보통 사용하는 작업관리자와 비슷한 역할을 하는 프로그램이다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이 프로그램에 &apos;-svc&apos; 옵션을 사용하여 어떤 프로그램이 어떤 서비스 명으로 동작중인지 확인하는 것이 가능하다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/273/133/tasklist.png&quot; alt=&quot;tasklist.png&quot; title=&quot;tasklist.png&quot; class=&quot;iePngFix&quot; width=&quot;669&quot; height=&quot;438&quot; style=&quot;&quot; /&gt;
&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;위와 같이 각 프로그램이 어떤 서비스로 등록되어 동작중인지 확인 할 수 있다.&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="netstat"/>
            <category term="tasklist"/>
            
   </entry>
   <entry>
      <title>배치(Batch) 프로그래밍 참고자료</title>
      <id>http://www.zemna.net/133254</id>
      <published>2009-04-03T09:48:39+09:00</published>
      <updated>2009-04-03T10:00:31+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133254"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133254#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(85, 85, 85); font-family: Gulim; &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;자료 출처: &lt;a href=&quot;http://blog.naver.com/darkstorm001/40017851898&quot; onclick=&quot;window.open(this.href);return false;&quot;&gt;http://blog.naver.com/darkstorm001/40017851898&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;▶ 참고자료&lt;/span&gt;&lt;br&gt;&lt;br&gt;다음은 배치 프로그래밍의 대가인 티모 살미 교수가 정리한 것입니다.&lt;br&gt;&lt;br&gt;아주 유용한 테크닉들이 들어있습니다.&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;1. &quot;@echo off&quot;를 일반적으로 사용하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;화면에 명령어들이 표시되지 않게 echo off 하고, 그 라인도 화면에 표시 되지 않게 하기 위해서 다음과 같이 하면 된다.&lt;br&gt;@echo off&lt;br&gt;이 것은 MsDos 3.30 이후 버전에서만 작동한다. 이것을 일반적으로 사용하게 하기 위해서 3.30이상의 MsDos를 사용한다면 autoexec.bat 안에 다음과 같이 적어 놓는다.&lt;br&gt;set _echo=@&lt;br&gt;그리고 배치파일에서 다음과 같이 사용한다면 어느 버전의 MsDos버전에서도 작동한다.&lt;br&gt;%_echo%echo off&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;2. 모든 파일을 지우기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;=====================&lt;br&gt;가장 흔하게 질문되는 것(FAQ)중의 하나는 del *.* 을 사용껦 때,&quot;Are you sure (Y/N)?&quot; 라는 확인을 어떻게 하면 나타나지 않게 하는것이다. 다음과 같이 사용한다.&lt;br&gt;echo y| del *.*&lt;br&gt;화면에 나타나는 메세지도 보이지 않게 하려면 다음과 같이 한다.&lt;br&gt;echo y| del *.* &gt; nul&lt;br&gt;이러한 확인 절차를 표시하지 않게 하는 것은 토론의 여지가 많지만,위와 같이 사용할 수 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;3. 다중 반복&lt;/span&gt;&lt;/span&gt;&lt;br&gt;============&lt;br&gt;배치파일에서 다중 루프(반복)를 사용하는 것이 가능하다. 다음의 두배치파일을 생각해 보자. 그리고 test.bat을 불러 실행시켜 보자.&lt;br&gt;echo off&lt;br&gt;rem TEST.BAT&lt;br&gt;for %%f in (a b c d e f) do %comspec% /c test2 %%f&lt;br&gt;&lt;br&gt;echo off&lt;br&gt;rem TEST2.BAT&lt;br&gt;for %%g in (1 2 3) do echo %1%%g&lt;br&gt;아니면 한줄로 다음과 같이 써서 사용할 수도 있다.&lt;br&gt;for %%f in(a b c d e f) do %comspec% /c for %%g in (1 2 3) do echo %%f%%g&lt;br&gt;이 두번째 방법의 단점은 echo가 화면에 표시된다는 것이다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;4. 디렉토리가 존재하는지 확인하는 방법&lt;/span&gt;&lt;/span&gt;&lt;br&gt;======================================&lt;br&gt;디렉토리가 있는지 확인하는 것은 가끔 매우 쓸모있는 일이다. %1의 디렉토리가 없다면 다음 확인은 참이 될것이다.&lt;br&gt;if not exist %1\nul if not exiat %1nul echo Directory %1 does not exist&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;5. 프로그램을 현디렉토리나 경로에서 사용할 수 있는지 확인하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;배치 프로그램에서 프로그램을 불러서 사용할때, 그 파일에 대한 경로를 써주지 않았을 경우, 그 프로그램이 현재의 디렉토리나 경로에서 사용가능한지 확인할 때 도움이 될 것이다.&lt;br&gt;set _found=&lt;br&gt;if exist %1 set _found=yes&lt;br&gt;for %%d in (%path%) do if exist %%d\%1 set _found=yes&lt;br&gt;for %%d in (%path%) do if exist %%d%1 set _found=yes&lt;br&gt;if &quot;%_found%&quot;==&quot;yes&quot; goto _continue&lt;br&gt;echo %1 is not at path or the current directory&lt;br&gt;goto _out&lt;br&gt;:_continue&lt;br&gt;echo %1 found at path or in the current directory&lt;br&gt;:_out&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;6. 배치파일에서 서브루틴이나 재귀적방법을 사용하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;배치파일 안에서 서브루틴을 사용하는 것은 가능하다. 방법은 서브루틴이 실행된 뒤에 돌아가야할 곳을 가르키는 환경변수(예를들면_return)를 설정하는 것이다. 이런 예는 UNPACK.BAT 이나 BOOT.BAT의:_common 과 :_subru 부분에서 찾아 볼 수 있다.&lt;br&gt;마찬가지로 재귀적인 사용이 가능하다. (&quot;재귀적인 방법&quot;의 의미는 한 배치파일이 자기 자신을 불러 사용하는 것이다.) 이 예는 SAFEDEL.BAT에서 아래의 행을 따라 찾아 보면 된다.&lt;br&gt;for %%f in (%1) do call safedel %%f recurse&lt;br&gt;배치파일의 0번째 인수(%0)는 배치파일 자신을 나타내므로, safedel은 %0으로 대치 되어 사용할 수도 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;7. 매개 인수(parameter)를 대문자로 바꾸기.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;다음은 배치파일에 사용한 인수 %1 를 대문자로 바꾸어 주는 예제이다. 이는 MsDos는 path를 대문자로 바꾼다는 점을 이용한 것이다. 결과는 upcase_에 저장될 것이고, 원래의 경로가 다시 저장될 것이다.&lt;br&gt;set tmp_=%path%&lt;br&gt;path=%1&lt;br&gt;set upcase_=%path%&lt;br&gt;path=%tmp_%&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;8. 새로운 디렉토리를 경로에 붙이기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;자주 필요한 이 기술은 매우 간단하다. 예를 들어 %1를 경로에 덧붙이려면&lt;br&gt;path=%path%;%1&lt;br&gt;이라고 하면된다.&lt;br&gt;이 기술은 배치파일 안에서만 사용할 수 있다. 배치파일 안에서만 환경변수(%path%)를 사용할 수 있기 때문이다. 존재하지 않는 디렉토리를 덧붙이려한다거나 중복해서 경로를 덧붙이는 것을 방지하는 ADDPATH.BAT이라는 배치파일이 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;9. 두 파일을 비교하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;배치파일에서 두 파일이 같은지 아닌지 확인해 볼 수 있다. 이 기술은 MsDos의 외부 명령어인 fc.exe와 find.exe를 사용한다. (외부 명령어라는 뜻은 MsDos와 같이 있는 프로그램들이다. 대부분의 외부 명&lt;br&gt;령어용 프로그램들은 c:\dos 에 위치한다.)&lt;br&gt;fc %1 %2 &gt; tmp$$$&lt;br&gt;type tmp$$$ | find /i &quot;fc: no differences encountered&quot; &gt;diffe$$$&lt;br&gt;if exist notsame$ del notsame$$$&lt;br&gt;copy diffe$$$ notsame$ &gt; nul&lt;br&gt;if not exist notsame$ echo Files %1 and %2 are different&lt;br&gt;if exist notsame$ echo Files %1 and %2 are identical&lt;br&gt;if exist tmp$$$ del tmp$$$&lt;br&gt;if exist notsame$ del notsame$&lt;br&gt;if exist diffe$$$ del diffe$$$&lt;br&gt;좀더 생각하면 이 기술은 다른 목적에도 사용할 수 있다. 이는 파일안에 주어진 문자열이 있는지 확인 하는데 바탕을 두고 있기 때문이다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;10. 빈줄을 쓰기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;이는 간단하지만 종종 필요하고 유용한 기술이다. echo 바로 다음에점(.)을 찍으면 빈줄을 표시할 수 있다.&lt;br&gt;echo.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;11. pause를 이용해 메세지를 표시하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;메세지를 손쉽게 나타나게 할 수 있다. 메세지를 echo한 다음 pause 를 사용하는데, pause의 메세지를 nul로 보내면 된다.&lt;br&gt;echo Break to quit, any other key to remove the tmp directory&lt;br&gt;pause &gt; nul&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;12. for를 이용한 다양한 rename 기술 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;===================================&lt;br&gt;이 기술이 기본적이고 사소하지만, 이를 생각해 내기란 쉽지 않을 것이다. for 문은 파일의 이름을 바꾸는데 특별히 유용하다. 예를 들면, 내가 다음의 파일들을 가지고 있을 때, (터보 파스칼 TP 4.0,&lt;br&gt;5.0, 5.5, 6.0) 내가 버전 29를 30으로 바꾸기 원한다고 할때,&lt;br&gt;tspa2940.zip&lt;br&gt;tspa2950.zip&lt;br&gt;tspa2955.zip&lt;br&gt;tspa2960.zip&lt;br&gt;다음은 손쉽게 그런 일을 해준다.&lt;br&gt;for %f in (40 50 55 60) do re tspa29%f.zip tspa30%f.zip&lt;br&gt;물론 파일이름 바꾸는 일 말고도 이 기술로 다양한 일을 할 수 있다.&lt;br&gt;하나의 예는 다음과 같다.&lt;br&gt;for %d in (a b) do format %d:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;13. 와일드카드를 확인하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;이 예제는 인수 %1이 와일드 카드를 사용하고 있는지 아닌지 확인한다.&lt;br&gt;@echo off&lt;br&gt;for %%f in (%1) do if &quot;%%f&quot;==&quot;%1&quot; goto _nowilds&lt;br&gt;echo Parameter %1 contains wildcards (or is missing)&lt;br&gt;:_nowilds&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;14. 배치 작업을 중간에 그만두지 못하게 하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;ctty 명령어를 사용해서 입력장치나 출력장치를 새로 설정하여 배치파일을 중단시키는 것을 방지할 수 있다. 여기의 예제는 패스워드로 e를 넣어야 하는 간단한 배치파일이다.&lt;br&gt;ctty가 nul로 돌려진 동안&amp;lt;,&gt;의 리디렉션이 필요한 것을 눈여겨 보라. ask라는 배치파일을 돕&lt;br&gt;기 위한 프로그램은 같이 포함되어 있다. ( MsDos의 choice와 비슷하다. 단, 에러 레벨을 입력한 문자의 아스키 값으로 돌리는 것만 틀리다.)&lt;br&gt;@echo off&lt;br&gt;ctty nul&lt;br&gt;echo Now you cannot break the batch with ^C or ^Break &gt; con&lt;br&gt;:_ask&lt;br&gt;echo Use e to break &gt; con&lt;br&gt;ask /b /d &amp;lt; con&lt;br&gt;if errorlevel==101 if not errorlevel==102 goto _out&lt;br&gt;goto _ask&lt;br&gt;:_out&lt;br&gt;ctty con&lt;br&gt;echo Back to normal. Now you can break the batch with ^C or&lt;br&gt;^Break.&lt;br&gt;이 배치파일이 작동되고 있는 동안에는 alt-crtl-del로 다시 부팅할수도 없다. 이 같은 일을 하는 noboot.exe라는 램상주 프로그램도 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;15. autoexec.bat를 중지하고 건너뛰는 것을 방지하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;브레이크를 눌러 autoexec.bat를 건너 뛰어 지나치지 않게 하기 위해서 다음과 같이 config.sys에 쓰면 된다.&lt;br&gt;shell=c:\command.com /p nul&lt;br&gt;이렇게 하기 전에 만일의 경우를 대비해서 플로피 디스켓으로 부팅할준비를 해둔다. autoexec.bat 맨 뒷줄에 &apos;ctty con&apos;이라고 덧 붙여야 된다. 그렇게 하지 않으면 키보드가 말을 듣지 않을 것이고, 준비한 플로피 디스켓으로 부팅해야 할 것이다 :-).&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;16. 확장자를 인식하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;단지 확장자를 확인하려던가, 주어진 파일의 이름에서 확장자를 환경변수로 저장하려고 할때, 이 것은 매우 유용하다. 어떻게 하는지 여기에 있다. 이 배치파일은 PC-Magazine July 1992, Vol 11, No. 13,&lt;br&gt;page 528에 나온 정보를 이용한 것이다. for 루프에서 슬레시(/)로 시작하는 인수는 두 부분으로 나누어지는데, 처음 부분은 인수의 첫문자이고 다른 부분은 나머지 문자열이다.&lt;br&gt;이 해결방법에서 하나의 문제점은 .* 이라던가 .??? 이란 확장자를 인식하지 못하는 것이다. 그러나 &quot;와일드카드를 확인하기&quot;를 이용해서 확인하면 될 것이다. 이러한 기술을 이용한 것중에 UNPACK.BAT라&lt;br&gt;는 배치파일이 있다.&lt;br&gt;@echo off&lt;br&gt;set exten_=%1&lt;br&gt;:_next&lt;br&gt;set prev_=%exten_%&lt;br&gt;for %%f in (/%exten_%) do set exten_=%%f&lt;br&gt;if &quot;.%exten_%&quot;==&quot;%prev_%&quot; goto _extfound&lt;br&gt;if not &quot;%exten_%&quot;==&quot;%prev_%&quot; goto _next&lt;br&gt;goto _noext&lt;br&gt;:_extfound&lt;br&gt;echo The filename %1 has an extension %exten_%&lt;br&gt;goto _out&lt;br&gt;:_noext&lt;br&gt;echo The filename %1 has no extension&lt;br&gt;:_out&lt;br&gt;set exten_=&lt;br&gt;set prev_=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;17. % 문자 인용부호&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;&lt;br&gt;%1은 배치파일에 주어진 첫번째 인수를 가르킨다. 이처럼 &apos;echo %1&apos;이라고 하면 첫번째 인수를 표시해 준다. 대신에 %1라는 문자를 표시하고 싶은 경우 어떻게 해야하는가? % 문자는 인용부호처럼 행동한다. 그래서 %%1이라고 쓴 경우 실제로는 &quot;%1&quot;이라고 화면에 표시된다. 아래의 간단한 연습을 실행해보라.&lt;br&gt;@echo off&lt;br&gt;if &quot;%1&quot;==&quot;&quot; goto _out&lt;br&gt;echo %1&lt;br&gt;echo %%1&lt;br&gt;:_out&lt;br&gt;이 기능을 이용한 것은 &quot;배치의 보조 배치파일을 없애기&quot;를 보아라.&lt;br&gt;좋은 예로는 DELPATH.BAT가 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;18. 배치의 보조 배치파일을 없애기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;많은 배치 프로그램이 call을 사용해서 보조 배치파일을 불러다 쓴다. 많은 경우 이런 일을 재귀적인 사용을 통해 자기 자신을 불러다씀으로써 보조 파일을 사용하는 것을 줄일 수 있다. 보조코드는 배치파일 자기자신에 넣어 놓는다. 이러한 기술은 와일드 카드를 받아들이는 TYPE 같은 SHOW.BAT 에서 가장 잘 나타나 있다. 일반적으로는 개개의 파일을 type하기 위해서 보조파일이 필요하다. 다른 예는&lt;br&gt;SAFEDEL.BAT에서 찾아볼수있다.&lt;br&gt;이와 같은 일을 하기 위한 다른 기술이 있다. 원래의 배치파일이 보조 배치파일을 만든 다음 그것을 불러 사용하는 것이다. 이런 것으로는 DELPATH.BAT의 예를 들 수 있다. 여기에는 사용되는 드라이브를&lt;br&gt;보여주는 간단한 예가 있다. (c 부터 t 까지 가능하다. 여기선 더 쓰면 줄이 넘어가니까!)&lt;br&gt;@echo off&lt;br&gt;echo @echo off&gt; tmp$$$.bat&lt;br&gt;echo if exist %%1:\nul echo Drive %%1: is present&gt;&gt; tmp$$$.bat&lt;br&gt;for %%d in (c d e f g h i j k l m n o p q r s t) do call tmp$$$&lt;br&gt;%%d&lt;br&gt;del tmp$$$.bat&lt;br&gt;디스크의 볼륨 레이블을 찾아내는 창의적인 기교가 PC-Magazine August 1992, Vol. 11, No. 14, p. 527에 실렸다. 여기는 같은 기술을 사용하는 예가 있다. 환경변수 getdir_에 현재의 디렉토리를 저장한다. 이 기술은 PUSHDIRE.BAT에 사용되고 있다.&lt;br&gt;@echo off&lt;br&gt;echo @echo off&gt; director.bat&lt;br&gt;echo set getdir_=%%2&gt;&gt; director.bat&lt;br&gt;echo echo %%getdir_%%&gt;&gt; director.bat&lt;br&gt;dir | find &quot;Directory&quot;&gt; go.bat&lt;br&gt;call go&lt;br&gt;if exist director.bat del director.bat&lt;br&gt;if exist go.bat del go.bat&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;19. subst 명령어를 경로에 사용하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;어떤 디렉토리를 읽기 쉽게 하기 위해서 간단한 배치파일을 사용한다. 만약 subst 가 이미 설정되어서 생길 수 있는 에러를 방지한다. 그리고 마지막으로 현재 대치된 디렉토리의 현황을 보여준다.&lt;br&gt;@echo off&lt;br&gt;if exist m:\nul echo The substitution has already been made&lt;br&gt;if not exist m:\nul subst m: c:\math&lt;br&gt;if not exist s:\nul subst s: c:\support&lt;br&gt;subst&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;20. 일주일에 한번 실행하기. (요일을 확인하기)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;요일을 환경변수에 넣는 것은 어려운 기술이다. 완전한 예는 WEEKLY.BAT에서 찾아볼수 있다. 이 기술의 핵심은 아래에 나와 있는데, 요일을 weekday_라는 환경변수에 저장하는 것이다. 일반 도스 프로그램 외에 아무런 보조 프로그램이 필요없다.&lt;br&gt;@echo off&lt;br&gt;echo.| date | find &quot;Current&quot; &gt; tmp$$$.bat&lt;br&gt;echo set weekday_=%%3&gt; current.bat&lt;br&gt;call tmp$$$&lt;br&gt;echo %weekday_%&lt;br&gt;if &quot;%weekday_%&quot;==&quot;Fri&quot; echo Thank God it&apos;s Friday&lt;br&gt;if exist tmp$$$.bat del tmp$$$.bat&lt;br&gt;if exist current.bat del current.bat&lt;br&gt;set weekday_=&lt;br&gt;사실, 위에서 %%3 대신에 %%4를 사용하면 오늘의 날짜를 확인할 수 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;21. 파일이름에 경로가 포함되었는지 확인하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;우선 먼저 &quot;확장자를 인식하기&quot;를 보면 같은 아이디어인 것을 알 수 있다. 파일이름이 단순히 go.exe 로 이루어 졌는지, 아니면 경로를 포함해서 r:\progs\go.exe와 같이 이루어 졌는지 확인하는 것은 r:\progs\*.exe와 같이 확장자를 사용했다면 매우 복잡한 일이다. 여기서 어떻게 되는지 설명하였다. 이를 완전히 이해했다면 확실히 배치 파일들에 대해서 이해하기 시작했다고 말할 수 있을 것이다.&lt;br&gt;@echo off&lt;br&gt;echo @echo off&gt; tmp$$$.bat&lt;br&gt;echo set rest_=%%1&gt;&gt; tmp$$$.bat&lt;br&gt;echo :_next&gt;&gt; tmp$$$.bat&lt;br&gt;echo set prev_=%%rest_%%&gt;&gt; tmp$$$.bat&lt;br&gt;echo for %%%%g in (/%%rest_%%) do set rest_=%%%%g&gt;&gt; tmp$$$.bat&lt;br&gt;echo if &quot;:%%rest_%%&quot;==&quot;%%prev_%%&quot; goto _found&gt;&gt; tmp$$$.bat&lt;br&gt;echo if &quot;\%%rest_%%&quot;==&quot;%%prev_%%&quot; goto _found&gt;&gt; tmp$$$.bat&lt;br&gt;echo if not &quot;%%rest_%%&quot;==&quot;%%prev_%%&quot; goto _next&gt;&gt; tmp$$$.bat&lt;br&gt;echo goto _nopath&gt;&gt; tmp$$$.bat&lt;br&gt;echo :_found&gt;&gt; tmp$$ at&lt;br&gt;echo set haspath_=yes&gt;&gt; tmp$$$.bat&lt;br&gt;echo goto _out&gt;&gt; tmp$$$.bat&lt;br&gt;echo :_nopath&gt;&gt; tmp$$$.bat&lt;br&gt;echo set haspath_=no&gt;&gt; tmp$$$.bat&lt;br&gt;echo :_out&gt;&gt; tmp$$$.bat&lt;br&gt;echo set rest_=&gt;&gt; tmp$$$.bat&lt;br&gt;echo set prev_=&gt;&gt; tmp$$$.bat&lt;br&gt;for %%f in (%1) do call tmp$$$ %%f&lt;br&gt;if &quot;%haspath_%&quot;==&quot;yes&quot; echo Filename %1 includes a path&lt;br&gt;if &quot;%haspath_%&quot;==&quot;no&quot; echo Filename %1 does not include a path&lt;br&gt;rem if exist tmp$$$.bat del tmp$$$.bat&lt;br&gt;set haspath_=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;22. 엔터키를 누르지 않고 시간을 보기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;현재의 시간을 보는 간단한 기술은 다음과 같다.&lt;br&gt;echo.| time | find /v &quot;new&quot;&lt;br&gt;시간을 환경변수로 저장하는 방법은 LASTBOOT.BAT을 보아라.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;23. 에러레벨 값을 확인하는 다른 방법&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;많은 프로그램과 몇개의 도스명령어들( diskcomp, format, xcopy)은끝날 때 에러 레벨을 발생시킨다. 에러레벨의 누적적인 성질 때문에 에러 레벨을 확인하는 것은 다소 복잡해진다. 그래서 만약 에러레벨이 정확히 2인지 확인하기 위해서는 다음과 같이 한다.&lt;br&gt;if errorlevel==2 if not errorlevel==3 echo Errorlevel 2&lt;br&gt;for 명령어를 사용하는 다른 방법으로 다음을 들수 있다.&lt;br&gt;for %%e in (0 1 2 3 4 5 6 7) do if errorlevel==%%e set&lt;br&gt;_errlev=%%e&lt;br&gt;if &quot;%_errlev%&quot;==&quot;2&quot; echo Errorlevel 2&lt;br&gt;좀 더 일반적으로 다음과 같이 할 수 있다.&lt;br&gt;for %%e in (0 1 2 3 4 5 6 7) do if errorlevel==%%e set&lt;br&gt;_errlev=%%e&lt;br&gt;if &quot;%_errlev%&quot;==&quot;2&quot; echo Errorlevel %_errlev%&lt;br&gt;복잡한 배치파일에서 편리한 방법은 goto를 사용하는 것이다.&lt;br&gt;for %%e in (0 1 2) do if errorlevel==%%e goto _label%%e&lt;br&gt;goto _out&lt;br&gt;:_label0&lt;br&gt;echo Errorlevel 0&lt;br&gt;:_label1&lt;br&gt;echo Errorlevel 1&lt;br&gt;:_label2&lt;br&gt;echo Errorlevel 2&lt;br&gt;:_out&lt;br&gt;이 기술을 실제로 사용하는 예는 BOOT.BAT에서 찾아볼수 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;24. 배치파일의 출력을 리디렉션(redirection)하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;배치파일 안에서의 출력은 손 쉽게 재 방향전환(redirecion)할 수 있다. 다음과 같은 example.bat 이라는 배치파일을 생각해보자.&lt;br&gt;@echo This is a redirection test&gt; test&lt;br&gt;&quot;example&quot;를 실행시키면 아래의 문장을 담은 &quot;test&quot;라는 파일을 생성 할 것이다.&lt;br&gt;This is a redirection test&lt;br&gt;이 줄은 eoln(end of line: ascii 13 + 10)을 줄 끝에 포함하고 있다. 리디렉션 기호 &apos;&gt;&apos; 앞에 아무런 공백도 주지 않는 것이 현명할때가 있다.&lt;br&gt;배치파일이 만드는 출력을 다시 재 방향전환(redirection)하는 것은 다소 복잡하다. 다음과 같은 내용을 지닌 example2.bat을 생각해 보자.&lt;br&gt;@echo This is another redirection test&lt;br&gt;실행하면,&lt;br&gt;example2 &gt; test&lt;br&gt;출력은 화면에 나오고, 빈 test라는 파일이 생성될 것이다. 출력을 재 방향 전환 시키기 위해서는 다음과 같이 command.com 명령어 해석기를 통해서 배치파일을 실행해야 한다.( command.com은 현디렉토리나 경로에 있어야 한다.)&lt;br&gt;command /c example2 &gt; test&lt;br&gt;이와 같이 하면 내용이 &quot;test&quot;라는 파일에 담길 것이다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;25. 환경저장 공간이 충분한지 확인하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;=====================================&lt;br&gt;만약 배치파일이 환경저장 변수를 사용하면, 환경저장 공간이 부족할경우가 있다. 만약 &quot;Out of environment space&quot;라는 메세지를 받는다&lt;br&gt;면 잘 알려진 방법을 통해서 다음과 같이 config.sys 의 shell을 설정해서 환경저장 공간을 늘릴 수 있다.&lt;br&gt;shell=c:\bin\command.com c:\bin /e:1024 /p&lt;br&gt;이 보다 덜 알려진 기술로는 환경저장 공간이 모자라기 전에 미리 확인해 볼수 있다. 아래의 예는 32바이트의 환경이 남아 있는지 확인한다.&lt;br&gt;@echo off&lt;br&gt;set test_=12345678901234567890123456789012&lt;br&gt;if &quot;%test_%&quot;==&quot;12345678901234567890123456789012&quot; goto _yes&lt;br&gt;echo Insufficient environment space&lt;br&gt;goto _out&lt;br&gt;:_yes&lt;br&gt;echo Sufficient environment space&lt;br&gt;set test_=&lt;br&gt;rem Whatever you wish to do&lt;br&gt;:_out&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;26. 드라이브를 사용 못하게 하는 간단한 방법&lt;/span&gt;&lt;/span&gt;&lt;br&gt;====================================&lt;br&gt;임시로 드라이브를 사용하지 못하게 하려면, subst명령어를 사용하면 된다. 예는 아래와 같다.&lt;br&gt;@echo off&lt;br&gt;md c:\none&lt;br&gt;subst d: c:\none&lt;br&gt;다시 사용하게 하려면,&lt;br&gt;@echo off&lt;br&gt;subst d: /d&lt;br&gt;rd c:\none&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;27. 프린터에 escape 명령어를 보내기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;===================================&lt;br&gt;여기 정말 사소한 기술이 있다. 명령행에서 곧바로 프린터에게 escape sequence를 보낼 수 없다. 그러나 다음과 같은 배치파일을 이용하면 간단하다.&lt;br&gt;@echo ESC%1&gt; prn&lt;br&gt;ESC는 진짜 escape문자로 에디터로 쓰여져야 된다. 이 방법의 한가지 결점은 라인피드를 보내는 것이다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;28. 무작위 문자열을 만든는 방법&lt;/span&gt;&lt;/span&gt;&lt;br&gt;===============================&lt;br&gt;UseNet news에서 무작위 문자열을 만드는 방법을 물어보는 사람이 있었다. 대답은 다음과 같다. 이를 확장해서 공부해보기 바란다.&lt;br&gt;@echo off&lt;br&gt;echo 10 randomize(val(mid$(time$,7,2))) &gt; tmp.bas&lt;br&gt;echo 20 open &quot;tmp2.bat&quot; for output as #1 &gt;&gt; tmp.bas&lt;br&gt;echo 30 x$ = mid$(str$(int(rnd*10000)),2) &gt;&gt; tmp.bas&lt;br&gt;echo 40 print #1,&quot;@set ramdom_=&quot;;x$ &gt;&gt; tmp.bas&lt;br&gt;echo 50 close #2 &gt;&gt; tmp.bas&lt;br&gt;echo 60 system &gt;&gt; tmp.bas&lt;br&gt;gwbasic tmp.bas&lt;br&gt;call tmp2&lt;br&gt;del tmp.bas&lt;br&gt;del tmp2.bat&lt;br&gt;set&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;29. 문자열의 길이를 알아내기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;============================&lt;br&gt;문자열의 길이를 찾아내는 일은 PC Magazine January 26, 1993 issue 에 실렸다. 여기서 제안하는 방법은 PC 메거진의 방법과 근본적으로 같지만, 더 일반적이다.&lt;br&gt;@echo off&lt;br&gt;set test_=Testing the lenght of a string&lt;br&gt;echo %test_% &gt; len$&amp;amp;$&amp;amp;$&lt;br&gt;dir len$&amp;amp;$&amp;amp;$ | find &quot;LEN$&amp;amp;$&amp;amp;$&quot; &gt; go$$$.bat&lt;br&gt;echo @echo off&gt; len$&amp;amp;$&amp;amp;$.bat&lt;br&gt;echo set length_=%% len$&amp;amp;$&amp;amp;$.bat&lt;br&gt;call go$$$&lt;br&gt;echo The lenght is %length_% bytes&lt;br&gt;del len$&amp;amp;$&amp;amp;$&lt;br&gt;del len$&amp;amp;$&amp;amp;$.bat&lt;br&gt;del go$$$.bat&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(34, 170, 34);&quot;&gt;30. MsDos의 버전을 환경변수로 저장하기&lt;/span&gt;&lt;/span&gt;&lt;br&gt;======================================&lt;br&gt;ADJCURS.BAT을 보면 알겠지만, 배치파일로만 버전을 알아낼 수있다.&lt;br&gt;여기에 다른 방법이 있다.&lt;br&gt;@echo off&lt;br&gt;ver &gt; go$$$.bat&lt;br&gt;echo @echo off&gt; ms-dos.bat&lt;br&gt;echo set version_=%%2&gt;&gt; ms-dos.bat&lt;br&gt;call go$$$&lt;br&gt;echo Your MsDos version is %version_%&lt;br&gt;del go$$$.bat&lt;br&gt;del ms-dos.bat&lt;/p&gt;&lt;/div&gt;</content>
                  <category term="배치"/>
            <category term="Batch"/>
            
   </entry>
   <entry>
      <title>Software Architecture Tactics</title>
      <id>http://www.zemna.net/133244</id>
      <published>2009-04-02T09:14:43+09:00</published>
      <updated>2009-04-02T09:14:43+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133244"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133244#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; line-height: normal; white-space: pre; &quot;&gt;인터넷에서 발견한 Software Architecture Tactic을 요약한 자료입니다.&lt;/span&gt;&lt;br&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; line-height: normal; white-space: pre;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; line-height: normal; white-space: pre;&quot;&gt;저작권에 문제가 있으면 삭제하겠습니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; line-height: normal; white-space: pre;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140510&amp;amp;sid=c13a2354a8102449723b9294149a93a0&quot;&gt;SA-tactics.pdf&lt;/a&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; line-height: normal; white-space: pre;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="아키텍처"/>
            <category term="Architecture"/>
            <category term="SA"/>
            
   </entry>
   <entry>
      <title>객체지향을 내것으로</title>
      <id>http://www.zemna.net/133229</id>
      <published>2009-04-01T23:11:38+09:00</published>
      <updated>2009-04-01T23:11:38+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133229"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133229#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;마소에서 연재되었던 객체지향 관련 자료입니다. 
&lt;UL&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140563&amp;amp;sid=e648cfa270083fcd671314fb7e7fe01d&quot;&gt;객체지향을 내것으로-01.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140564&amp;amp;sid=e1d4776ef92fe730e0dfea961b330533&quot;&gt;객체지향을 내것으로-02.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140565&amp;amp;sid=3410e624661bf46d55edae5752f7abe3&quot;&gt;객체지향을 내것으로-03.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140566&amp;amp;sid=6a1931b715e411dc29231e8ce6bdf28f&quot;&gt;객체지향을 내것으로-04.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140567&amp;amp;sid=a4d398fb68993ba32992ad82ca686993&quot;&gt;객체지향을 내것으로-05.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140568&amp;amp;sid=b695c0f2ca2689c60383d0a405095cec&quot;&gt;객체지향을 내것으로-06.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140569&amp;amp;sid=8a8baace13feabca2ec94df2369b1f22&quot;&gt;객체지향을 내것으로-07.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140570&amp;amp;sid=ee2a7f15a3cac1198b0fc39ee7fa948d&quot;&gt;객체지향을 내것으로-08.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140571&amp;amp;sid=8bbc20aa49b5b3eb4194c65f4a94167f&quot;&gt;객체지향을 내것으로-09.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140572&amp;amp;sid=a9833d1a52e104a7d5777501d25e7495&quot;&gt;객체지향을 내것으로-10.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140573&amp;amp;sid=7467a82d4b8ab49328cfadb2f23df007&quot;&gt;객체지향을 내것으로-11.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140574&amp;amp;sid=2ea356c15107fd28888243812dbc4543&quot;&gt;객체지향을 내것으로-12.pdf&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/div&gt;</content>
                  <category term="객체지향"/>
            
   </entry>
   <entry>
      <title>마소 소켓통신 관련 자료 모음</title>
      <id>http://www.zemna.net/133211</id>
      <published>2009-04-01T22:24:53+09:00</published>
      <updated>2009-04-01T22:24:53+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133211"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133211#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;P&gt;마이크로소프트웨어에서 연재된 소켓통신 관련 자료 모음입니다.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140560&amp;amp;sid=d4d075e956338b62b9ffad853cf1cabf&quot;&gt;마소[2000.08]_윈속프로그래밍의 모든것이 궁금하다.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140561&amp;amp;sid=584eaff29e7a6585671853d204517267&quot;&gt;마소[2001.08]_몇년후에도 통할 비동기 소켓 프로그래밍 기법.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140562&amp;amp;sid=a608730467edf2dfc9d83aebc10e634a&quot;&gt;마소[2002.02]_윈도우CE용 소켓 라이브러리를 작성하자.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140556&amp;amp;sid=7ee9ada175510c4bc8f661789ce83cf9&quot;&gt;마소[2003.02]_비동기 소켓 통신을 이용한 게임 서버 구현.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140557&amp;amp;sid=63c580d78f40fe1808b99830bfa55735&quot;&gt;마소[2003.03]_윈속프로그래밍.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140558&amp;amp;sid=6adfa6296e193043ea9a04a212ca2490&quot;&gt;마소[2003.11]_윈속 프로그래밍 팁과 트릭.pdf&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140559&amp;amp;sid=5340a472c0cdf58e4ad112d5dde0d71b&quot;&gt;마소[2005.03]_Completion Port를 이용한 이벤트-메시지 기반 서버 프레임워크.pdf&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/div&gt;</content>
                  <category term="Socket"/>
            <category term="소켓통신"/>
            <category term="비동기소켓"/>
            
   </entry>
   <entry>
      <title>ATL을 이용해 Internet Explorer Tool Band 제작하기</title>
      <id>http://www.zemna.net/133197</id>
      <published>2009-04-01T22:16:59+09:00</published>
      <updated>2009-04-01T22:16:59+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133197"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133197#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;인터넷에서 찾은 실전 자료입니다.&lt;BR&gt;&lt;BR&gt;저작권에 문제가 있으면 삭제하겠습니다.&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;실전! Explorer Tool Band 제작&lt;/STRONG&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140547&amp;amp;sid=a66e72d6640534f802dbc50cc92c66ff&quot;&gt;실전! Explorer Tool Band 제작1.doc&lt;/A&gt; &lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140548&amp;amp;sid=7437eeb18930e3ff67fb78ac7e6c7618&quot;&gt;실전! Explorer Tool Band 제작2.doc&lt;/A&gt; &lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140549&amp;amp;sid=4a93b6e9e1abc5b23a306961721564e4&quot;&gt;실전! Explorer Tool Band 제작3.doc&lt;/A&gt; &lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140550&amp;amp;sid=9c25a411fd54ce6e862546b4efbc985a&quot;&gt;실전! Explorer Tool Band 제작4.doc&lt;/A&gt; &lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140551&amp;amp;sid=4a51a8f2e55a99ec290a05e038c356f7&quot;&gt;실전! Explorer Tool Band 제작5.doc&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;ATL을 이용한 IE Browser Extension Component 만들기&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140552&amp;amp;sid=38dd9cf6110c2ddcf99db520e83689df&quot;&gt;ATL을 이용한 IE Browser Extension component 만들기1.doc&lt;/A&gt; &lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140553&amp;amp;sid=d338dd352ee9ca656a830d9c0f53f170&quot;&gt;ATL을 이용한 IE Browser Extension component 만들기2.doc&lt;/A&gt; &lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140554&amp;amp;sid=ee91722007fcfebad3c651b6d2e45035&quot;&gt;ATL을 이용한 IE Browser Extension component 만들기3.doc&lt;/A&gt;&lt;BR&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140555&amp;amp;sid=fac028172f7bba9fcbca72d77a3432f0&quot;&gt;ATL을 이용한 IE Browser Extension component 만들기4.doc&lt;/A&gt;&lt;/div&gt;</content>
                  <category term="ATL"/>
            <category term="IE"/>
            <category term="ToolBand"/>
            
   </entry>
   <entry>
      <title>Effective C#</title>
      <id>http://www.zemna.net/133141</id>
      <published>2009-03-31T14:05:38+09:00</published>
      <updated>2009-03-31T14:05:38+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133141"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133141#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/141/133/Effective_CSharp.jpg&quot; alt=&quot;Effective_CSharp.jpg&quot; title=&quot;Effective_CSharp.jpg&quot; width=&quot;400&quot; height=&quot;400&quot; style=&quot;&quot; /&gt;
&lt;div&gt;&lt;br&gt;
&lt;ol&gt;&lt;li&gt;데이터 멤버 대신에 항상 프로퍼티를 사용하라&lt;br&gt;
&lt;/li&gt;&lt;li&gt;const 보다는 readonly가 좋다&lt;/li&gt;&lt;li&gt;cast 보다는 is나 as가 좋다&lt;/li&gt;&lt;li&gt;#if 대신 Conditional Attribute를 사용하라&lt;/li&gt;&lt;li&gt;항상 ToString()을 작성하라&lt;/li&gt;&lt;li&gt;value 타입과 reference 타입을 구분하라&lt;/li&gt;&lt;li&gt;immutable atomic value 타입이 더 좋다&lt;/li&gt;&lt;li&gt;value 타입을 사용할 때 0이라는 값이 의미를 가질 수 있도록 하라&lt;/li&gt;&lt;li&gt;ReferenceEquals(), static Equals(), instance Equals(), operator==의 상호 연관성을 이해하라&lt;/li&gt;&lt;li&gt;GetHashCode()의 함정에 유의하라&lt;/li&gt;&lt;li&gt;foreach 루프가 더 좋다&lt;/li&gt;&lt;li&gt;할당문보다는 변수 초기화를 사용하는 편이 더 좋다&lt;/li&gt;&lt;li&gt;static 클래스 멤버는 static 생성자를 사용하여 초기화하라&lt;/li&gt;&lt;li&gt;연쇄적인 생성자 호출을 이용하라&lt;/li&gt;&lt;li&gt;자원해제를 위해서 using과 try/finally를 이용하라&lt;/li&gt;&lt;li&gt;Grabate를 최소화하라&lt;/li&gt;&lt;li&gt;boxing과 unboxing을 최소화하라&lt;/li&gt;&lt;li&gt;표준 Dispose 패턴을 구현하라&lt;/li&gt;&lt;li&gt;상속보다는 interface를 정의하고 구현하는 것이 좋다&lt;/li&gt;&lt;li&gt;interface의 구현과 virtual 메서드의 overriding을 구분하라&lt;/li&gt;&lt;li&gt;delegate를 이용하여 콜백을 표현하라&lt;/li&gt;&lt;li&gt;이벤트를 이용하여 외부로 노출할 인터페이스를 정의하라&lt;/li&gt;&lt;li&gt;클래스 내부 객체에 대한 reference 반환을 피하라&lt;/li&gt;&lt;li&gt;명령적 프로그래밍보다 선언적 프로그래밍이 더 좋다&lt;/li&gt;&lt;li&gt;serializable 타입이 더 좋다&lt;/li&gt;&lt;li&gt;IComparable과 IComparer를 이용하여 순차관계를 구현하라&lt;/li&gt;&lt;li&gt;ICloneable의 구현을 피하라&lt;/li&gt;&lt;li&gt;형변환 연산자의 구현을 피하라&lt;/li&gt;&lt;li&gt;가변 클래스의 변경이 영향을 줄 경우에만 new 한정자를 사용하라&lt;/li&gt;&lt;li&gt;CLS를 준수하는 어셈블리가 더 좋다&lt;/li&gt;&lt;li&gt;작고 단순한 메서드가 더 좋다&lt;/li&gt;&lt;li&gt;작고 응집도가 높은 어셈블리가 더 좋다&lt;/li&gt;&lt;li&gt;타입의 가시성을 제한하라&lt;/li&gt;&lt;li&gt;웹 API는 큰 단위로 작성하라&lt;/li&gt;&lt;li&gt;이벤트 핸들러보다 override를 사용하는 편이 낫다&lt;/li&gt;&lt;li&gt;닷넷 런타임의 진단기능을 활용하라&lt;/li&gt;&lt;li&gt;표준 환경설정 메터니즘을 이용하라&lt;/li&gt;&lt;li&gt;데이터 바인딩을 사용하라&lt;/li&gt;&lt;li&gt;닷넷의 유효성 검증 기능을 사용하라&lt;/li&gt;&lt;li&gt;적정한 collection 개체를 이용하라&lt;/li&gt;&lt;li&gt;새로운 구조체보다는 DataSet이 좋다&lt;/li&gt;&lt;li&gt;reflection을 단순화하기 위해서 attribute를 사용하라&lt;/li&gt;&lt;li&gt;reflection을 과도하게 사용하지 말라&lt;/li&gt;&lt;li&gt;애플리케이션에 특화된 예외 클래스를 완벽하게 작성하라&lt;/li&gt;&lt;li&gt;견고한 예외 보증 기법이 더 좋다&lt;/li&gt;&lt;li&gt;Interop를 최소화하라&lt;/li&gt;&lt;li&gt;안전한 코드가 더 좋다&lt;/li&gt;&lt;li&gt;활용할 수 있는 다양한 툴과 리소스에 대해서 알아두라&lt;/li&gt;&lt;li&gt;C# 2.0의 주요 특징&lt;/li&gt;&lt;li&gt;ECMA 표준을 익혀라&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>[영어비법]영어_이제_그걸_디벼주마_(45page로_요약)김기호</title>
      <id>http://www.zemna.net/133138</id>
      <published>2009-03-31T13:09:00+09:00</published>
      <updated>2009-03-31T13:09:00+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133138"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133138#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;[영어비법]영어_이제_그걸_디벼주마_(45page로_요약)김기호.doc&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>[PDF] Wiley Pattern Oriented Software Architecture Volumn 5</title>
      <id>http://www.zemna.net/133135</id>
      <published>2009-03-31T13:05:59+09:00</published>
      <updated>2009-03-31T13:05:59+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133135"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133135#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; line-height: normal; white-space: pre; &quot;&gt;[PDF] Wiley Pattern Oriented Software Architecture Volumn 5&lt;/span&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>ZemnaCmd v1.2 배포합니다.</title>
      <id>http://www.zemna.net/133124</id>
      <published>2009-03-31T09:20:35+09:00</published>
      <updated>2009-03-31T09:21:27+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/133124"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/133124#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;ZemnaCmd v1.2를 배포합니다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;수정사항&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;ZemnaCmd Configure 아이콘 수정&lt;/li&gt;&lt;li&gt;ZemnaCmd 메뉴 출력시 상/하단에 Seperator 출력되도록 수정&lt;/li&gt;&lt;li&gt;설치 프로그램 InnoSetup으로 변경&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;다운로드&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.zemna.net/?module=file&amp;amp;act=procFileDownload&amp;amp;file_srl=140543&amp;amp;sid=6bf66409d405bea66ebde1a034dbf315&quot;&gt;ZemnaCmd_v1.2.exe&lt;/a&gt;
&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="ZemnaCmd"/>
            
   </entry>
   <entry>
      <title>가볍고 무료인 패스워드관리 프로그램! KeePass</title>
      <id>http://www.zemna.net/132703</id>
      <published>2009-03-30T17:08:25+09:00</published>
      <updated>2009-03-30T17:08:25+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132703"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132703#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/703/132/KeePass.png&quot; alt=&quot;KeePass.png&quot; title=&quot;KeePass.png&quot; class=&quot;iePngFix&quot; width=&quot;668&quot; height=&quot;459&quot; style=&quot;&quot; /&gt;
&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 18px; font-weight: bold; line-height: 28px; &quot;&gt;KeePass 프로그램은?&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;요즘시대에 우리는 많은 패스워드를 기억해야 할 필요가 있습니다. 윈도우 네트워크를 사용하기위한 로그인 정보, 이메일 계정, 홈페이지 FTP 정보, 온라인 게임 계정정보 등등 수도없이 많은 패스워드를 우린 사용하고 있습니다. 또한, 우리는 각각의 로그인정보에 다른 패스워드를 사용해야 합니다. 그렇지 않으면 만일 비밀번호를 타인이 얻었을 경우 상상하기도 싫은 피해를 입을 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;KeePass 프로그램은 오픈소스 패스워드 관리 프로그램입니다. 이 프로그램을 통해 비밀번호를 안전하게 관리할 수 있습니다. KeePass 프로그램을 통해 마스터 키나 키 파일로 잠겨있는 하나의 패스워드 데이터베이스를 생성 할 수 있습니다. 그래서 하나의 마스터 패스워드나 키 파일만 잘 관리하면 모든 비밀번호를 안정적으로 관리할 수 있습니다. 이 데이터베이스는 현재 잘 알려진 AES, Twofish 암호화 알고리즘을 사용하여 암호화 되어 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;프로그램 다운로드 : &lt;a href=&quot;http://keepass.info/download.html&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://keepass.info/download.html&quot; onclick=&quot;window.open(this.href);return false;&quot;&gt;http://keepass.info/download.html&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="암호관리"/>
            <category term="KeePass"/>
            
   </entry>
   <entry>
      <title>.NET 용 Docking Library! DockPanel Suite</title>
      <id>http://www.zemna.net/132686</id>
      <published>2009-03-26T16:23:02+09:00</published>
      <updated>2009-03-26T16:23:02+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132686"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132686#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;무료로 사용가능한 윈도우 도킹(Docking) 라이브러리를 찾는 도중 소스포지(&lt;A href=&quot;http://sourceforge.net/projects/dockpanelsuite&quot;&gt;http://sourceforge.net/projects/dockpanelsuite&lt;/A&gt;)에서 발견한 오픈소스 라이브러리이다. 이 라이브러리를 이용하면 Visual Studio 2008과 같은 형식의 도킹 시스템을 구현할 수 있다.&lt;BR&gt;&lt;BR&gt;&lt;img src=&quot;http://www.zemna.net/files/attach/images/140481/686/132/DockPanel_Suite.png&quot; alt=&quot;DockPanel_Suite.png&quot; title=&quot;DockPanel_Suite.png&quot; class=&quot;iePngFix&quot; width=&quot;770&quot; height=&quot;511&quot; style=&quot;&quot; /&gt;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;가장 아쉬운 점은 디자인 타임에서 컨트롤을 도킹할 수 없다는 점이다. 도킹하려고 하는 컨트롤을 UserControl이 아닌 Form을 기반으로 상속받아 만들어야 하기 때문이다.&lt;BR&gt;&lt;BR&gt;개발자는 &apos;Weifen Luo&apos; 라고 하는 사람이다. 이런 소스를 개발하여 오픈하다니.. 그저 고마울 따름이다..&lt;/div&gt;</content>
                  <category term=".NET"/>
            <category term="Docking"/>
            <category term="도킹"/>
            
   </entry>
   <entry>
      <title>C# Naming Guide</title>
      <id>http://www.zemna.net/132679</id>
      <published>2009-03-26T16:09:29+09:00</published>
      <updated>2009-03-26T16:10:37+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132679"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132679#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;TABLE style=&quot;BORDER-COLLAPSE: collapse&quot; border=0 cellSpacing=0 borderColor=#111111 cellPadding=0 width=771&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height=51 vAlign=top width=771&gt;
&lt;H1&gt;Naming Conventions for .NET / C# Projects&lt;/H1&gt;
&lt;P&gt;Martin Zahn, Akadia AG, 20.03.2003&lt;/P&gt;
&lt;HR color=#34b389 noShade&gt;
&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height=74 vAlign=top width=771&gt;
&lt;P class=verdana&gt;The original of this document was d&lt;SPAN lang=en-us&gt;eveloped by the Microsoft special interest group&lt;/SPAN&gt;. We made some addons.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;This document explains the naming conventions that should be used with .NET projects.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;A consistent naming pattern is one of the most important elements of predictability and discoverability in a managed class library. Widespread use and understanding of these naming guidelines should eliminate unclear code and make it easier for developers to understand shared code.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H1&gt;Capitalization Styles Defined&lt;/H1&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;We define three types of capitalization styles:&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;Pascal case&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;The first letter in the identifier and the first letter of each subsequent concatenated word are capitalized.&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;&lt;FONT color=#ff0000&gt;B&lt;/FONT&gt;ack&lt;FONT color=#ff0000&gt;C&lt;/FONT&gt;olor, &lt;FONT color=#ff0000&gt;D&lt;/FONT&gt;ata&lt;FONT color=#ff0000&gt;S&lt;/FONT&gt;et&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;Camel case&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;The first letter of an identifier is lowercase and the first letter of each subsequent concatenated word is capitalized.&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;&lt;FONT color=#ff0000&gt;n&lt;/FONT&gt;umber&lt;FONT color=#ff0000&gt;O&lt;/FONT&gt;f&lt;FONT color=#ff0000&gt;D&lt;/FONT&gt;ays, &lt;FONT color=#ff0000&gt;i&lt;/FONT&gt;s&lt;FONT color=#ff0000&gt;V&lt;/FONT&gt;alid&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Uppercase&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;All letters in the identifier are capitalized.&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;ID, PI&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;H1&gt;Hungarian Type Notation Defined&lt;/H1&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Hungarian notation is any of a variety of standards for organizing a computer program by selecting a schema for naming your variables so that their type is readily available to someone familiar with the notation. It is in fact a commenting technique.&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;strFirstName, iNumberOfDays&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;There are different opinions about using this kind of type notation in programming nowadays. Some say that it’s useful, and it should be used everywhere to enhance clarity of your code. Others say it just obfuscates your code, because it has no real advantage in modern programming environments.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Our point of view is a moderated one: use it wisely, meaning, we only use Hungarian notation for &lt;B&gt;private or local variables&lt;/B&gt;, that are only accessible and interesting to the programmer of the class.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;&lt;B&gt;Don’t use it with public&lt;/B&gt; variables, properties or parameters in methods, because they are exposed to the outside world. Someone who uses your classes and accesses properties of your class, is not interested in type, but just wants to use them.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;In the .NET framework, there are a lot of types, so we extended and adapted the Hungarian notation with our own type notation.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;H1&gt;Naming Guidelines&lt;/H1&gt;
&lt;P class=big&gt;1).&amp;nbsp; Private Variables (Fields in C#) Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Prefix private variables with&lt;/SPAN&gt; a &quot;_&quot; and &lt;SPAN lang=en-us&gt;Hungarian-style notation.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use camel case as a general rule, or uppercase for very small words&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;FONT color=#ff0000&gt;_&lt;/FONT&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#ff0000&gt;s&lt;/FONT&gt;tr&lt;FONT color=#ff0000&gt;F&lt;/FONT&gt;irst&lt;FONT color=#ff0000&gt;N&lt;/FONT&gt;ame,&lt;/SPAN&gt; &lt;FONT color=#ff0000&gt;_&lt;/FONT&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#ff0000&gt;d&lt;/FONT&gt;set&lt;FONT color=#ff0000&gt;E&lt;/FONT&gt;mployees&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#0000ff&gt;// Field&lt;/FONT&gt;&lt;BR&gt;private OleDbConnection &lt;B&gt;&lt;FONT color=#ff0000&gt;_&lt;/FONT&gt;connection&lt;/B&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#0000ff&gt;// Property&lt;/FONT&gt;&lt;BR&gt;public OleDbConnection Connection&lt;BR&gt;{&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp; &lt;SPAN lang=en-us&gt;get { return &lt;B&gt;&lt;FONT color=#ff0000&gt;_&lt;/FONT&gt;&lt;/B&gt;connection; }&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp; &lt;SPAN lang=en-us&gt;set { &lt;B&gt;&lt;FONT color=#ff0000&gt;_c&lt;/FONT&gt;&lt;/B&gt;onnection = value; }&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;2).&amp;nbsp; Local Variables Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Prefix private or local variables with Hungarian-style notation.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use camel case as a general rule, or uppercase for very small words&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;SPAN lang=en-us&gt;strFirstName, dsetEmployees&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;3).&amp;nbsp; Namespace Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;The general rule for naming namespaces is to use the company name followed by the technology name and optionally the feature and design as follows:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;C&lt;SPAN lang=en-us&gt;ompanyName.TechnologyName[.Feature][.Design]&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Prefixing namespace names with a company name or other well-established brand avoids the possibility of two published namespaces having the same name. Use a stable, recognized technology name at the second level of a hierarchical name.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;FONT color=#ff0000&gt;Akadia.Traffic&lt;/FONT&gt;, &lt;SPAN lang=en-us&gt;System.Web.UI, System.Windows.Forms&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use Pascal case as a general rule, or uppercase for very small words.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;SPAN lang=en-us&gt;System.Windows.Forms, System.Web.UI&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;4).&amp;nbsp; Class Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use a noun or noun phrase to name a class.&lt;/SPAN&gt; &lt;SPAN lang=en-us&gt;&lt;BR&gt;Do not use a type prefix, such as C for class, on a class name.&lt;BR&gt;Do not use the underscore character (_).&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use Pascal case. Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#ff0000&gt;Fi&lt;/FONT&gt;le&lt;FONT color=#ff0000&gt;S&lt;/FONT&gt;tream, Button&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;5).&amp;nbsp; Interface Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Prefix interface names with the letter &quot;&lt;SPAN lang=en-us&gt;I&lt;/SPAN&gt;&quot;&lt;SPAN lang=en-us&gt;,&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN lang=en-us&gt;&lt;SPAN lang=en-us&gt;to indicate that the type is an interface.&lt;BR&gt;Do not use the underscore character (_).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use Pascal case. Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#ff0000&gt;I&lt;/FONT&gt;ServiceProvider, &lt;FONT color=#ff0000&gt;I&lt;/FONT&gt;Formatable&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;6).&amp;nbsp; Parameter Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use descriptive parameter names. Parameter names should be descriptive enough that the name of the parameter and its type can be used to determine its meaning in most scenarios. To distinguish parameters from other variables the prefix &lt;B&gt;&quot;p&quot;&lt;/B&gt; should be used.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Do not prefix parameter names with Hungarian type notation.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;Do not use a &lt;SPAN lang=en-us&gt;prefix&lt;/SPAN&gt; for &lt;SPAN lang=en-us&gt;parameter names&lt;/SPAN&gt; of an event handler and exceptions.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use camel case. Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;FONT color=#ff0000&gt;p&lt;/FONT&gt;T&lt;SPAN lang=en-us&gt;ypeName,&lt;/SPAN&gt; &lt;FONT color=#ff0000&gt;p&lt;/FONT&gt;N&lt;SPAN lang=en-us&gt;umberOfItems&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;7).&amp;nbsp; Method Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use verbs or verb phrases to name methods.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use Pascal case. Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#ff0000&gt;R&lt;/FONT&gt;emove&lt;FONT color=#ff0000&gt;A&lt;/FONT&gt;ll(), &lt;FONT color=#ff0000&gt;G&lt;/FONT&gt;et&lt;FONT color=#ff0000&gt;C&lt;/FONT&gt;har&lt;FONT color=#ff0000&gt;A&lt;/FONT&gt;t()&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;8).&amp;nbsp; Property / Enumerations Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use a noun or noun phrase to name properties.&lt;BR&gt;Do not use Hungarian notation.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use Pascal case. Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;&lt;SPAN lang=en-us&gt;&lt;FONT color=#ff0000&gt;B&lt;/FONT&gt;ack&lt;FONT color=#ff0000&gt;C&lt;/FONT&gt;olor, NumberOfItems&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;9).&amp;nbsp; Event Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use an EventHandler suffix on event handler names.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Specify two parameters named sender and e. The sender parameter represents the object that raised the event. The sender parameter is always of type object, even if it is possible to use a more specific type. The state associated with the event is encapsulated in an instance of an event class named&lt;/SPAN&gt; &lt;B&gt;&quot;&lt;SPAN lang=en-us&gt;e&lt;/SPAN&gt;&quot;&lt;/B&gt;&lt;SPAN lang=en-us&gt;. Use an appropriate and specific event class for the e parameter type.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Name an event argument class with the &lt;B&gt;EventArgs&lt;/B&gt; suffix.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Case guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;&lt;SPAN lang=en-us&gt;Use Pascal case. Example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;p&lt;SPAN lang=en-us&gt;ublic delegate void MouseEventHandler(object sender, Mouse&lt;FONT color=#ff0000&gt;EventArgs&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;e&lt;/FONT&gt;);&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;9).&amp;nbsp; Exception Naming Guidelines&lt;/P&gt;
&lt;P class=header&gt;&lt;SPAN lang=en-us&gt;Naming guidelines&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;Event handlers in Visual Studio .NET tend to use an &quot;e&quot; parameter for the event parameter to the call. To ensure we avoid a conflict, we will use &quot;&lt;B&gt;ex&lt;/B&gt;&quot; as a standard variable name for an Exception object.&lt;/P&gt;
&lt;P class=verdana&gt;Example&lt;/P&gt;
&lt;P class=verdana&gt;catch (Exception &lt;B&gt;&lt;FONT color=#ff0000&gt;ex&lt;/FONT&gt;&lt;/B&gt;)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; // Handle Exception&lt;BR&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;10).&amp;nbsp;&amp;nbsp; Constant Naming Guidelines&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=verdana&gt;The names of variables declared class constants should be all uppercase with words separated by underscores. It is recommended to use a grouping naming schema.&lt;/P&gt;
&lt;P class=verdana&gt;Example (for group AP_WIN):&lt;/P&gt;
&lt;P class=courier&gt;&lt;B&gt;AP_WIN_MIN_WIDTH, AP_WIN_MAX_WIDTH, AP_WIN_MIN_HIGHT, AP_WIN_MAX_HIGHT&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;11). C# Primitive Type Notation&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=courier&gt;sbyte&amp;nbsp;&amp;nbsp; sy&lt;BR&gt;short&amp;nbsp;&amp;nbsp; s&lt;BR&gt;int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i&lt;BR&gt;long&amp;nbsp;&amp;nbsp;&amp;nbsp; l&lt;BR&gt;byte&amp;nbsp;&amp;nbsp;&amp;nbsp; y&lt;BR&gt;ushort&amp;nbsp; us&lt;BR&gt;uint&amp;nbsp;&amp;nbsp;&amp;nbsp; ui&lt;BR&gt;ulong&amp;nbsp;&amp;nbsp; ul&lt;BR&gt;float&amp;nbsp;&amp;nbsp; f&lt;BR&gt;double&amp;nbsp; d&lt;BR&gt;decimal dec&lt;BR&gt;bool&amp;nbsp;&amp;nbsp;&amp;nbsp; b&lt;BR&gt;char&amp;nbsp;&amp;nbsp;&amp;nbsp; c&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=big&gt;12).&amp;nbsp; Visual Control Type Notation&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=courier&gt;&lt;SPAN lang=en-us&gt;Assembly&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm&lt;BR&gt;Boolean&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bln&lt;BR&gt;Button&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btn&lt;BR&gt;Char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ch&lt;BR&gt;CheckBox&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cbx&lt;BR&gt;ComboBox&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmb&lt;BR&gt;Container&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctr&lt;BR&gt;DataColumn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dcol&lt;BR&gt;DataGrid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dgrid&lt;BR&gt;DataGridDateTimePickerColumn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dgdtpc&lt;BR&gt;DataGridTableStyle&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dgts&lt;BR&gt;DataGridTextBoxColumn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dgtbc&lt;BR&gt;DataReader&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dreader&lt;BR&gt;DataRow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drow&lt;BR&gt;DataSet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dset&lt;BR&gt;DataTable&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtable&lt;BR&gt;DateTime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date&lt;BR&gt;&lt;/SPAN&gt;Dialog&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dialog&lt;SPAN lang=en-us&gt;&lt;BR&gt;DialogResult&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dr&lt;BR&gt;Double&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbl&lt;BR&gt;Exception&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex&lt;BR&gt;GroupBox&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gbx&lt;BR&gt;HashTable&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htbl&lt;BR&gt;ImageList&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iml&lt;BR&gt;Integer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&lt;BR&gt;Label&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbl&lt;BR&gt;ListBox&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbx&lt;BR&gt;ListView&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv&lt;BR&gt;MarshallByRefObject&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rmt&lt;BR&gt;Mainmenu&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mm&lt;BR&gt;MenuItem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mi&lt;BR&gt;&lt;/SPAN&gt;MDI-Frame&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame&lt;BR&gt;MDI-Sheet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheet&lt;SPAN lang=en-us&gt;&lt;BR&gt;NumericUpDown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nud&lt;BR&gt;Panel&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pnl&lt;BR&gt;PictureBox&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbx&lt;BR&gt;RadioButton&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rbtn&lt;BR&gt;&lt;/SPAN&gt;SDI-Form&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; form&lt;SPAN lang=en-us&gt;&lt;BR&gt;SqlCommand&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlcom&lt;BR&gt;SqlCommandBuilder&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlcomb&lt;BR&gt;SqlConnection&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlcon&lt;BR&gt;SqlDataAdapter&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlda&lt;BR&gt;StatusBar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stb&lt;BR&gt;String&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; str&lt;BR&gt;StringBuilder&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strb&lt;BR&gt;TabControl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabctrl&lt;BR&gt;TabPage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabpage&lt;BR&gt;TextBox&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbx&lt;BR&gt;ToolBar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbr&lt;BR&gt;ToolBarButton&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbb&lt;BR&gt;Timer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmr&lt;BR&gt;UserControl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usr&lt;BR&gt;WindowsPrincipal&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wpl&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/div&gt;</content>
                  <category term="Naming"/>
            <category term="네이밍"/>
            
   </entry>
   <entry>
      <title>Generic List&lt;&gt; 복제하는 방법</title>
      <id>http://www.zemna.net/132633</id>
      <published>2009-03-23T14:19:58+09:00</published>
      <updated>2009-03-23T14:19:58+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132633"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132633#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;P&gt;클래스에서 Copy() 나 Clone() 함수를 제공하지 않아 For 문을 이용해서 대입해야 하는 줄 알았다...&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;C#&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;// Generic List 생성
List&amp;lt;int&amp;gt; a = new List&amp;lt;int&amp;gt;();

// 값 추가하기
a.Add(1);
a.Add(2);
a.Add(3);

// List 복제하기
List&amp;lt;int&amp;gt; b = new List&amp;lt;int&amp;gt;(a);
&lt;/pre&gt;
&lt;P&gt;위의 코드와 같이 생성할 List 템플릿의 생성자에 복제할 List 클래스의 인스턴스를 넘겨주면 복제가 된다.&lt;/P&gt;&lt;/div&gt;</content>
                  <category term="List&lt;&gt;"/>
            
   </entry>
   <entry>
      <title>소스 커밋(Commit)시 메세지를 입력하지 않으면 커밋되지 않도록 설정하기</title>
      <id>http://www.zemna.net/132616</id>
      <published>2009-03-16T13:34:18+09:00</published>
      <updated>2009-03-16T13:34:18+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132616"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132616#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;pre-commit.cmd&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: bash;&quot;&gt; &quot;C:\Program Files\Subversion\bin\svnlook.exe&quot; log -t %2 %1 | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo &quot;커밋 메세지를 입력해야 합니다&quot; &gt;&amp;amp;2
exit 1
:OK
exit 0&lt;/pre&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>바이너리(Binary) 파일 Read/Write 하기</title>
      <id>http://www.zemna.net/132363</id>
      <published>2009-03-03T09:27:18+09:00</published>
      <updated>2009-03-03T09:28:01+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132363"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132363#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;.NET Framrwork에서는 바이너리(Binary) 파일을 읽고 쓰기위한 BinaryReader, BinaryWriter 클래스를 제공한다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이 클래스를 이용하면 쉽게 파일을 읽고 쓸 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;BinaryReader 를 이용한 파일 읽기&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;BinaryReader&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;// 파일 열기
FileStream fs = File.OpenRead(&quot;a.bin&quot;);

// 스트림을 이용하여 BinaryReader 클래스 생성하기
BinaryReader br = new BinaryReader(fs);

// 파일 Read용 임시 변수
Int16 temp = 0;

// 2바이트 읽기
temp = br.ReadInt16();

// 60문자 만큼 스트링 읽기
String str = new String(br.ReadChars(60));

br.Close();
fs.Close();&lt;/pre&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px; font-weight: bold; line-height: 20px; &quot;&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;BinaryWriter 를 이용한 파일 쓰기&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px; font-weight: bold; line-height: 20px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;BinaryWriter&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;// 파일 생성
FileStream fs = File.Create(&quot;a.bin&quot;);

// 스트림을 이용하여 BinaryWriter 클래스 생성하기
BinaryWriter bw = new BinaryWriter(fs);

// 임시 변수
Int16 temp = 0;

// 2바이트 쓰기
bw.Write(temp);

bw.Close();
fs.Close();&lt;/pre&gt;&lt;br&gt;이와 같이 쉽에 Read/Writer가 가능하다.&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="Binary"/>
            <category term="BinaryReader"/>
            <category term="BinaryWriter"/>
            
   </entry>
   <entry>
      <title>윈도우(Windows), 리눅스(Linux), 맥(Mac)에서 이슈트래커 정상적으로 사용하기</title>
      <id>http://www.zemna.net/132349</id>
      <published>2009-03-02T14:14:17+09:00</published>
      <updated>2009-03-02T14:15:19+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132349"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132349#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;현재 제로보드 XE에 적용되어 있는 이슈트래커는 리눅스 기반에 설치되어야만 정상적으로 동작이 가능하다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;왜 윈도우나 맥에서는 동작되지 않는지 분석해 본 결과 각 운영체제별로 줄바꿈 문자에 대한 처리가 틀려 나타난 현상이였다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;각 운영체제별 줄바꿈 문자는 아래와 같은 구성으로 이루어져 있다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;윈도우 : 캐리지 리턴(Cr) &amp;amp; 라인 피드(Lf)&lt;/div&gt;&lt;div&gt;리눅스 : 라인 피드(Lf)&lt;/div&gt;&lt;div&gt;맥       : 캐리지 리턴(Cr)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;그러므로, 각 줄바꿈 문자를 통일되게 하나의 형식으로 변환해주면 정상적인 사용이 가능하다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;file_path&quot;&gt;/modules/issuetracker/classes/svn.class.php&lt;/span&gt;&lt;span class=&quot;description&quot;&gt;getList 함수&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: php;&quot;&gt; function getList($path, $revs = null) {
    if(substr($path,0,1)==&apos;/&apos;) $path = substr($path,1);
    if(strpos($path,&apos;..&apos;)!==false) return;

    $command = sprintf(
        &apos;%s --non-interactive %s --config-dir %s list %s%s%s&apos;,
        $this-&gt;svn_cmd,
        $this-&gt;_getAuthInfo(),
        $this-&gt;tmp_dir,
        $this-&gt;url,
        $path,
        $revs?&apos;@&apos;.(int)$revs:null
    );

    $buff = $this-&gt;execCmd($command, $error);

    // 운영체제 별 줄바꿈 문자 처리가 틀리므로 \n으로 통일시키기
    $buff = str_replace(array(&quot;\r\n&quot;, &quot;\r&quot;), &quot;\n&quot;, $buff);

    $list = explode(&quot;\n&quot;,$buff);

    if(!count($list)) return null;

    $file_list = $directory_list = $output = array();

    foreach($list as $name) {
        if(!$name) continue;
        $obj = null;
        $obj-&gt;name = $name;
        $obj-&gt;path = $path.$name;

        $logs = $this-&gt;getLog($obj-&gt;path, $revs, null, false, 1);
        $obj-&gt;revision = $logs[0]-&gt;revision;
        $obj-&gt;author = $logs[0]-&gt;author;
        $obj-&gt;date = $this-&gt;getDateStr(&quot;Y-m-d H:i&quot;,$logs[0]-&gt;date);
        $obj-&gt;gap = $this-&gt;getTimeGap($logs[0]-&gt;date);
        $obj-&gt;msg = $this-&gt;linkXE($logs[0]-&gt;msg);

        if(substr($obj-&gt;path,-1)==&apos;/&apos;) $obj-&gt;type = &apos;directory&apos;;
        else $obj-&gt;type = &apos;file&apos;;

        if($obj-&gt;type == &apos;file&apos;) $file_list[] = $obj;
        else $directory_list[] = $obj;
    }
    return array_merge($directory_list, $file_list);
}&lt;/pre&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;위의 코드의 18행에서처럼 줄바꿈 문자인 &apos;\n&apos; 을 이용하여 분리하기 전에 윈도우와 맥의 줄바꿈 문자인 &apos;\r\n&apos; ,&apos;\r&apos; 을 먼저 &apos;\n&apos; 으로 치환하고 분리하게 되면 정상적인 동작이 가능하다.&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="svn"/>
            <category term="issuetracker"/>
            <category term="이슈트래커"/>
            
   </entry>
   <entry>
      <title>XmlTextReader 클래스를 이용한 XML파일 읽기</title>
      <id>http://www.zemna.net/132334</id>
      <published>2009-02-27T11:34:23+09:00</published>
      <updated>2009-02-27T11:35:07+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132334"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132334#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;이번에는 XML파일을 XmlTextReader 클래스를 이용하여 읽는 방법에 대해 살펴보도록 하자.&lt;BR&gt;&lt;BR&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;읽고자하는 XML 파일&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!--This file stores application version list--&amp;gt;
&amp;lt;Programs&amp;gt;
  &amp;lt;Program&amp;gt;
    &amp;lt;ID&amp;gt;ZemnaAutoUpdater&amp;lt;/ID&amp;gt;
    &amp;lt;Name&amp;gt;Zemna Auto Updater&amp;lt;/Name&amp;gt;
    &amp;lt;Contents&amp;gt;하하하하하&amp;lt;/Contents&amp;gt;
    &amp;lt;RegistrationDate&amp;gt;2009-02-27 오전 11:28:02&amp;lt;/RegistrationDate&amp;gt;
    &amp;lt;Versions&amp;gt;
      &amp;lt;Version&amp;gt;
        &amp;lt;VersionNo&amp;gt;1.0.0&amp;lt;/VersionNo&amp;gt;
        &amp;lt;RegistrationDate&amp;gt;2009-02-27 오전 11:28:02&amp;lt;/RegistrationDate&amp;gt;
        &amp;lt;EditDate&amp;gt;2009-02-27 오전 11:28:02&amp;lt;/EditDate&amp;gt;
        &amp;lt;FolderPath&amp;gt;cadfasd&amp;lt;/FolderPath&amp;gt;
        &amp;lt;Files&amp;gt;
          &amp;lt;File&amp;gt;123.tx&amp;lt;/File&amp;gt;
        &amp;lt;/Files&amp;gt;
      &amp;lt;/Version&amp;gt;
    &amp;lt;/Versions&amp;gt;
  &amp;lt;/Program&amp;gt;
&amp;lt;/Programs&amp;gt;&lt;/pre&gt;&lt;BR&gt;위 파일을 읽는 코드는 아래와 같다.&lt;BR&gt;&lt;BR&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;XmlTextReader로 파일 읽기 샘플&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;List&amp;lt;ProgramInfo&amp;gt; IDataProcessor.LoadList(string filePath)
{
    // 데이터를 저장 할 변수 선언
    List&amp;lt;ProgramInfo&amp;gt; listPrg = null;

    int piIdx = 0;  // Last ProgramInfo Index
    int viIdx = 0;  // Last VersionInfo Index

    XmlTextReader reader = new XmlTextReader(filePath);

    // 공백을 처리하지 않음
    reader.WhitespaceHandling = WhitespaceHandling.None;

    while (reader.Read())
    {
        reader.MoveToContent();

        if (reader.NodeType == XmlNodeType.Element)
        {
            switch (reader.Name)
            {
                case &quot;Program&quot;:
                    if (listPrg == null)
                        listPrg = new List&amp;lt;ProgramInfo&amp;gt;();
                    ProgramInfo pi = new ProgramInfo();
                    listPrg.Add(pi);
                    piIdx = listPrg.Count - 1;
                    break;
                case &quot;ID&quot;:
                    listPrg[piIdx].ID = reader.ReadString();
                    break;
                case &quot;Name&quot;:
                    listPrg[piIdx].Name = reader.ReadString();
                    break;
                case &quot;Contents&quot;:
                    listPrg[piIdx].Contents = reader.ReadString();
                    break;
                case &quot;RegistrationDate&quot;:
                    if (reader.Depth == 2)
                        listPrg[piIdx].RegistrationDate = Convert.ToDateTime(reader.ReadString());
                    else
                        listPrg[piIdx].Versions[viIdx].RegistrationDate = Convert.ToDateTime(reader.ReadString());
                    break;
                case &quot;Version&quot;:
                    if (listPrg[piIdx].Versions == null)
                        listPrg[piIdx].Versions = new List&amp;lt;VersionInfo&amp;gt;();
                    VersionInfo vi = new VersionInfo();
                    listPrg[piIdx].Versions.Add(vi);
                    viIdx = listPrg[piIdx].Versions.Count - 1;
                    break;
                case &quot;VersionNo&quot;:
                    listPrg[piIdx].Versions[viIdx].VersionNo = reader.ReadString();
                    break;
                case &quot;EditDate&quot;:
                    listPrg[piIdx].Versions[viIdx].EditDate = Convert.ToDateTime(reader.ReadString());
                    break;
                case &quot;FolderPath&quot;:
                    listPrg[piIdx].Versions[viIdx].FolderPath = reader.ReadString();
                    break;
                case &quot;File&quot;:
                    if (listPrg[piIdx].Versions[viIdx].FileList == null)
                        listPrg[piIdx].Versions[viIdx].FileList = new List&amp;lt;string&amp;gt;();
                    listPrg[piIdx].Versions[viIdx].FileList.Add(reader.ReadString());
                    break;
            }
        }
    }

    reader.Close();

    return listPrg;
}&lt;/pre&gt;&lt;/div&gt;</content>
                  <category term="XML"/>
            <category term="XmlTextReader"/>
            
   </entry>
   <entry>
      <title>XmlTextWriter 클래스를 이용한 XML파일 생성법</title>
      <id>http://www.zemna.net/132324</id>
      <published>2009-02-27T10:39:48+09:00</published>
      <updated>2009-02-27T11:37:22+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132324"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132324#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;.NET Framework에서는 XML을 쉽게 기록할 수 있도록 &lt;STRONG&gt;XmlTextWriter&lt;/STRONG&gt; 클래스를 제공하고 있다.&lt;BR&gt;&lt;BR&gt;이 XmlTextWriter 클래스는 속도가 빠르고, 캐시되지 않으며, 앞으로만 이동 가능한 방법을 제공한다.&lt;BR&gt;&lt;BR&gt;아래는 XmlTextWriter 클래스를 사용한 예제이다.&lt;BR&gt;&lt;BR&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;XmlTextWriter 사용 예제&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;void IDataProcessor.SaveList(List&amp;lt;ProgramInfo&amp;gt; programList, string filePath)
{
    XmlTextWriter writer = new XmlTextWriter(filePath, null);

    // 자식요소에 따라 들여쓰기하기
    writer.Formatting = Formatting.Indented;

    writer.WriteStartDocument();

    writer.WriteComment(&quot;This file stores application version list&quot;);

    // &amp;lt;Programs&amp;gt;
    writer.WriteStartElement(&quot;Programs&quot;);

    for (int i = 0; i &amp;lt; programList.Count; i++)
    {
        // &amp;lt;Program&amp;gt;
        writer.WriteStartElement(&quot;Program&quot;);

        // &amp;lt;ID /&amp;gt;
        writer.WriteElementString(&quot;ID&quot;, programList[i].ID);

        // &amp;lt;Name /&amp;gt;
        writer.WriteElementString(&quot;Name&quot;, programList[i].Name);

        // &amp;lt;Contents /&amp;gt;
        writer.WriteElementString(&quot;Contents&quot;, programList[i].Contents);

        // &amp;lt;RegistrationDate /&amp;gt;
        writer.WriteElementString(&quot;RegistrationDate&quot;, programList[i].RegistrationDate.ToString());

        // &amp;lt;Versions&amp;gt;
        writer.WriteStartElement(&quot;Versions&quot;);

        for (int j = 0; j &amp;lt; programList[i].Versions.Count; j++)
        {
            // &amp;lt;Version&amp;gt;
            writer.WriteStartElement(&quot;Version&quot;);

            // &amp;lt;VersionNo /&amp;gt;
            writer.WriteElementString(&quot;VersionNo&quot;, programList[i].Versions[j].VersionNo);

            // &amp;lt;RegistrationDate /&amp;gt;
            writer.WriteElementString(&quot;RegistrationDate&quot;, programList[i].Versions[j].RegistrationDate.ToString());

            // &amp;lt;EditDate /&amp;gt;
            writer.WriteElementString(&quot;EditDate&quot;, programList[i].Versions[j].EditDate.ToString());

            // &amp;lt;FolderPath /&amp;gt;
            writer.WriteElementString(&quot;FolderPath&quot;, programList[i].Versions[j].FolderPath);

            // &amp;lt;Files&amp;gt;
            writer.WriteStartElement(&quot;Files&quot;);

            for (int k=0; k&amp;lt;programList[i].Versions[j].FileList.Count; k++)
            {
                // &amp;lt;File /&amp;gt;
                writer.WriteElementString(&quot;File&quot;, programList[i].Versions[j].FileList[k]);
            }

            // &amp;lt;/Files&amp;gt;
            writer.WriteEndElement();

            // &amp;lt;/Version&amp;gt;
            writer.WriteEndElement();
        }

        // &amp;lt;/Versions&amp;gt;
        writer.WriteEndElement();

        // &amp;lt;/Program&amp;gt;
        writer.WriteEndElement();
    }

    // &amp;lt;/Programs&amp;gt;
    writer.WriteEndElement();

    writer.Flush();
    writer.Close();
}
&lt;/pre&gt;&lt;BR&gt;위의 형식대로 파일을 기록하게 되면 아래와 같은 구조의 XML 파일이 생성되게 된다.&lt;BR&gt;&lt;BR&gt;
&lt;div class=&quot;ch_infobox&quot;&gt;&lt;span class=&quot;description&quot;&gt;생성된 XML 파일&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!--This file stores application version list--&amp;gt;
&amp;lt;Programs&amp;gt;
  &amp;lt;Program&amp;gt;
    &amp;lt;ID&amp;gt;ZemnaAutoUpdater&amp;lt;/ID&amp;gt;
    &amp;lt;Name&amp;gt;Zemna Auto Updater&amp;lt;/Name&amp;gt;
    &amp;lt;Contents&amp;gt;하하하하하&amp;lt;/Contents&amp;gt;
    &amp;lt;RegistrationDate&amp;gt;2009-02-27 오전 11:28:02&amp;lt;/RegistrationDate&amp;gt;
    &amp;lt;Versions&amp;gt;
      &amp;lt;Version&amp;gt;
        &amp;lt;VersionNo&amp;gt;1.0.0&amp;lt;/VersionNo&amp;gt;
        &amp;lt;RegistrationDate&amp;gt;2009-02-27 오전 11:28:02&amp;lt;/RegistrationDate&amp;gt;
        &amp;lt;EditDate&amp;gt;2009-02-27 오전 11:28:02&amp;lt;/EditDate&amp;gt;
        &amp;lt;FolderPath&amp;gt;cadfasd&amp;lt;/FolderPath&amp;gt;
        &amp;lt;Files&amp;gt;
          &amp;lt;File&amp;gt;123.tx&amp;lt;/File&amp;gt;
        &amp;lt;/Files&amp;gt;
      &amp;lt;/Version&amp;gt;
    &amp;lt;/Versions&amp;gt;
  &amp;lt;/Program&amp;gt;
&amp;lt;/Programs&amp;gt;&lt;/pre&gt;&lt;/div&gt;</content>
                  <category term="XML"/>
            <category term="XmlTextWriter"/>
            
   </entry>
   <entry>
      <title>버전관리를 위한 ObsoleteAttribute</title>
      <id>http://www.zemna.net/132305</id>
      <published>2009-02-24T14:28:54+09:00</published>
      <updated>2009-02-24T14:48:37+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132305"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132305#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;프로그램이나 라이브러리를 버전업할 때 기존에 제작했던 함수를 새로운 기능을 추가한 함수로 대체하거나 할 경우가 생길 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이런 경우, 기존에 제공하던 함수를 삭제하게 되면 하위 프로그램들과의 호환성에 문제가 생기고, 그냥 두면 코드가 복잡해지고 어디에서 사용했는지 분간해내기 어려운 경우가 생깁니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이때, Obsolete 특성을 사용하게 되면 그러한 문제를 해결 할 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Obsolete 특성은 그 위치의 항목을 앞으로 계속 사용하지 않는 편이 좋은 것으로 표시해줍니다.  이 특성이 어떻게 구성되어 있는지에 따라 Obsolete로 표시된 항목을 사용할 때마다 경고나 오류가 표시됩니다. 예를 들면 다음과 같습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;[System.Obsolete(&quot;use class B&quot;)]
class A
{
    public void Method() { }
}
class B
{
    [System.Obsolete(&quot;use NewMethod&quot;, true)]
    public void OldMethod()  { }
    public void NewMethod()  { }
}&lt;/pre&gt;&lt;br&gt;위와 같이 적용하고 A 클래스를 사용하게 되면 &quot;use class B&quot; 메세지의 경고가 생성되게 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;그리고 B 클래스의 OldMethod 함수를 호출하게 되면 이 경우에는 두번째 인수가 true로 설정되어 있으므로 컴파일러 오류가 발생하게 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Obsolete 특성은 인수 없이도 사용할 수 있지만 해당 항목이 계속 사용되지 않는 이우와 대신 사용할 항목에 대한 정보를 포함하는 것이 좋습니다.&lt;/div&gt;&lt;/div&gt;</content>
                  <category term="Obsolete"/>
            <category term="ObsoleteAttribute"/>
            
   </entry>
   <entry>
      <title>황동준님의 윈도우 32비트 프로그래밍 46~50</title>
      <id>http://www.zemna.net/132207</id>
      <published>2009-02-24T13:22:11+09:00</published>
      <updated>2009-02-24T13:26:59+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.zemna.net/132207"/>
      <link rel="replies" type="text/html" href="http://www.zemna.net/132207#comment"/>
      <author>
         <name>isym</name>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;
&lt;/p&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td background=&quot;file:///C:/Documents%20and%20Settings/sjkang/My%20Documents/Downloads/-%E2%91%B8%EB%A3%9E%E4%BB%A5-%20WINAPI/images/table0_over.jpg&quot; height=&quot;25&quot;&gt;
&lt;p&gt;&lt;b&gt;  윈도우 32비트 프로그래밍 46&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;922&quot; bgcolor=&quot;#e5e5e5&quot; height=&quot;93&quot;&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;안녕하세요..........돌팔이 황동준입니다...................&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이번시간 부터는 레지스트리에 대한 것에 대해 알아 보겠습니다. 혹시 레지스트리라는것을 들어 
보았습니까? 윈도우즈에서는 레지스트리라는 것이 존재하는데 이것은 일종의 하드웨어적, 소프트웨어적인 정보를 저장하고 있는 매체입니다. 우리가 
앞에서 배운 win.ini 파일에도 다양한 정보가 저장되어 있는데 사실 이것은 윈도우즈 3.1때와의 호환 때문에 존재하는 것이고 실제로 우리가 
다루어야 할 것은 바로 이 레지스트리입니다. 음.. 예를들어서 win.ini 파일에 프로그램이 설치되어 있는 디렉토리 정보가 들어 있었죠? 아마 
인스톨 쉴드라는 인스톨 툴로 인스톨 프로그램을 만들면 인스톨시에 win.ini 파일에 디렉토리 정보 저장 기능은 없을 겁니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;그러나 레지스트리에 설치된 디렉토리를 저장할 수 있는 기능은 있죠. 바로 레지스트리에도 
설치된 디렉토리 정보가 들어 있다는 말과도 같습니다. 그것 뿐만 아닙니다. PNP 하드웨어의 정보도 다 들어 있죠. 모뎀 포트를 자동으로 
찾는다거나 하는 작업을 바로 이 레지스트리를 검색해서 할수 있는 것입니다. 여러분들 넷스케이프 사용해 봤습니까? 거기에 보면 홈 디렉토리를 
지정할 수 있는 메뉴 아이템이 있을겁니다. MS 익스플로어의 요즘 버전은 제가 사용해 보지 않았지만 예전에 사용할 때에는 이 기능이 없더군요. 
그래서 항상 홈 디렉토리가 마이크로 소프트사였습니다. 그런데 이 홈 디렉토리 정보가 레지스트리에 등록되어 있다는 것을 우연히 알게 되었습니다. 
물론 그것을 바꿔서 홈 디렉토리를 바꾸었죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;너무 서론이 길었죠? 그렇다면 이러한 레지스트리를 어떻게 원하는데로 바꿀 수 있을까요? 
윈도우즈가 설치되어 있는 디렉토리에 보면 regedit.exe 파일이 있을 겁니다. 이 실행 파일을 실행시켜서 레지스트리 정보를 볼 수도 있고 
또 수정할 수도 있습니다. 이 프로그램을 레지스트리 편집기라고도 하죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;한번 실행해 보세요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;어때요? 크게 6개의 폴더가 보이죠? 각 커다란 폴더에는 의미가 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_CLASSES_ROOT&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이 하위에 있는 정보들은 문서의 형태, 파일연관상태에 대한 정보가 들어 있습니다. 실제로 
하위 폴더를 보면 아래아 한글 문서의 확장자, 압축 파일 확장자들의 정보가 들어 있음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_CURRENT_USER&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;각각 사용자에 따른 사용자 정보를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_LOCAL_MACHINE&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;하드웨어, 네트워크, 소프트웨어 정보가 이곳에 있습니다. 실제로 프로그램이 설치되어 있는 
디렉토리, PNP 하드웨어 등록 정보들이 이곳에 있는 거죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_USERS&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;각각 사용자에 대한 시스템 정보를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_CURRENT_CONFIG&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;하드웨어 설정에 대한 정보값이 들어 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_DYN_DATA&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;역시 하드웨어적인 정보값이 들어 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 각각에 대해 알아 보았으니 각 서브 폴더를 확인해 보시기 바랍니다. 폴더 옆에 보면 
플러스 기호가 있는데 여기에 마우스의 왼쪽 버튼으로 클릭하면 마이너스 기호로 바뀌고 그곳에 속해 있는 서브 폴더를 보여주게 됩니다. 다시 
클릭하면 감춰지죠. 서브 폴더를 보다보면 폴더 왼쪽에 아무 기호도 없는 폴더들이 있을 겁니다. 그것은 서브 폴더를 가지지 않음을 의미하는 
것입니다. 그렇다면 서브 폴더를 가지지 않은 폴더에 클릭한 후에 오른쪽에 있는 창을 보십시요. &lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;어때요? 네임에 어떤 이름이 있고 데이터에 값이 들어 있죠? 물론 아무 값도 가지지 않는 
경우도 있습니다. 서브 풀더를 가지고 있는 것도 마찬가지입니다. 왼쪽에 있는 기호에 클릭하지 않고 바로 그 폴더를 클릭하면 네임과 데이터에 값이 
표시될 것입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 새로운 용어를 알아 봅시다. 우리가 앞에서 언급한 폴더를 키라고 합니다. 각 키는 물론 
서브 키를 가질 수 있고 각 키에는 네임과 데이터를 가집니다. 물론 하나의 키는 여러개의 네임과 데이터를 가질 수 있습니다. 이해가 
가죠?&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 이제부터 우리는 기존에 등록되어 있는 키, 네임, 데이터를 읽는 것을 프로그램 상으로 
어떻게 구현하는지 알아 볼 것입니다. 물론 등록하는 방법도 알아 볼 거구요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;그러면 시작해 봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;먼저 등록되어 있는 정보를 읽어오는 방법부터 알아 봅시다. 처음에 정보를 가져올 키가 어떤 
것인지 지정해서 열어 주어야 합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegOpenKeyEx(&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPCTSTR  lpszSubKey,&lt;br&gt;    DWORD  dwReserved,&lt;br&gt;    REGSAM 
 samDesired,&lt;br&gt;    PHKEY  phkResult&lt;br&gt;   );   &lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;위 함수를 이용해서 레지스트리에 설정되어 있는 키를 열 수 있습니다. 첫번째 파라미터에 제일 
상단에 있는 루트키를 지정하면 되는데 이 키는 레지스트리 편지기를 실행했을 때 볼 수 있는 값을 지정하면 되는 겁니다. 아래 값들 중 하나가 
되겠군요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_CLASSES_ROOT&lt;br&gt;HKEY_CURRENT_USER&lt;br&gt;HKEY_LOCAL_MACHINE&lt;br&gt;HKEY_USERS&lt;br&gt;HKEY_CURRENT_CONFIG&lt;br&gt;HKEY_DYN_DATA&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;두번째 파라미터에는 우리가 정보를 가져올 서브키를 지정해 주면 됩니다. 서브키 내에 또다른 
서브키가 있으면 서브 디렉토리를 표시하던 식인 \\식으로 표시해 주면 됩니다. 세번째 파라미터에는 0을 지정하면 되고 네번째 파라미터에는 지정된 
예약어를 지정해주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;KEY_ALL_ACCESS              아래 모든 예약어를 
만족합니다.&lt;br&gt;KEY_CREATE_LINK             다른 키로부터의 링크를 허락합니다.&lt;br&gt;KEY_CREATE_SUB_KEY 
         서브키의 생성을 허락합니다.&lt;br&gt;KEY_ENUMERATE_SUB_KEYS      서브키의 보여줌을 
허락합니다.&lt;br&gt;KEY_EXECUTE                 서브키의 데이터를 가져오는 것을 
허락합니다.&lt;br&gt;KEY_QUERY_VALUE             서브키의 데이터를 가져오는 것을 허락합니다.&lt;br&gt;KEY_READ 
                   서브키의 데이터를 가져오는 것을 허락합니다.&lt;br&gt;KEY_SET_VALUE               서브키의 
데이터를 지정하는 것을 허락합니다.&lt;br&gt;KEY_WRITE                   서브키의 데이터를 지정하는 것을 허락합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;마지막 파라미터에는 서브키를 열었을때 얻어진 키 핸들을 저장할 변수의 주소를 지정해 주면 
됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 이제 서브키를 열었으니 그 키가 가지는 데이터를 가져오기만 하면 될 겁니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegQueryValueEx(&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPTSTR  lpszValueName,&lt;br&gt;    LPDWORD 
 lpdwReserved,&lt;br&gt;    LPDWORD  lpdwType,&lt;br&gt;    LPBYTE  lpbData,&lt;br&gt;    LPDWORD 
 lpcbData&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;위 함수를 이용해서 데이터를 가져올 수 있습니다. 첫번째 파라미터에는 위 
RegOpenKeyEx() 함수에서 얻은 키 핸들을 지정하면 되고 두번째 파라미터에는 가져올 데이터가 가지는 네임을 지정해 주면 됩니다. 네임이 
Default로 되어 있으면 그냥 &quot;&quot;식으로 지정해 주면 됩니다. 세번째 파라미터에는 0을 지정해 주면되고 네번째 파라미터에는 데이터의 
저장형태가 저장될 변수의 주소를 지정해주면 됩니다. 이 저장형태는 뒤에 가서 레지스트리에 정보를 기록할때 다시 설명드리겠습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;그리고 다섯번째 파라미터에는 읽어온 데이터가 저장될 주소를 지정하면 됩니다. 마지막 
파라미터에는 이 읽어온 데이터의 크기가 저장될 변수의 주소를 지정하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;데이터를 읽어오는 과정이 어렵지 않죠? 키를 열어서 작업을 다 했으면 그 키를 닫아 주어야 
합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegCloseKey(&lt;br&gt;    HKEY  hkey&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;위 함수를 이용해서 연 키를 닫을수 있습니다. 물론 새로 생성한 키도 위 함수를 이용해서 
닫아주면 되죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;그러면 이번에는 정보를 기록하는 방법에 대해 알아 봅시다. 마찬가지로 어렵지 않습니다. 먼저 
새로운 키를 생성하는 과정이 필요한데 그것은 아래 함수를 이용해서 하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegCreateKeyEx(&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPCTSTR  lpszSubKey,&lt;br&gt;    DWORD  dwReserved,&lt;br&gt;    LPTSTR 
 lpszClass,&lt;br&gt;    DWORD  fdwOptions,&lt;br&gt;    REGSAM 
 samDesired,&lt;br&gt;    LPSECURITY_ATTRIBUTES  lpSecurityAttributes,&lt;br&gt;    PHKEY 
 phkResult,&lt;br&gt;    LPDWORD  lpdwDisposition&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;첫번째 파라미터에는 제일 상단에 있는 루트키를 지정해 주면 되는데 이 루트키는 이미 
RegOpenKeyEx() 함수때 설명드렸을 겁니다. 두번째 파라미터에는 서브키를 지정해 주면 됩니다. 세번째 파라미터에는 NULL을 지정하면 
되고 네번째 파라미터에는 클래스 이름을 지정해 주면 됩니다. 보통 NULL을 지정하죠. 다섯번째 파라미터에는 지정된 예약어를 지정해 주면 되는데 
이때 지정될 수 있는 예약어는 다음과 같습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;REG_OPTION_VOLATILE         메모리에만 
저장됩니다.&lt;br&gt;REG_OPTION_NON_VOLATILE     파일에 저장됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;첫번째 예약어를 사용하게 되면 메모리에만 저장되므로 시스템이 재시작되면 무효가 되나 두번째 
예약어를 사용하게 되면 파일에 저장되므로 그 값이 계속 유효하게 됩니다. 어떤 차이인지 알겠죠?&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;여섯번째 파라미터에는 어세스 옵션을 지정해 주면 되는데 다음과 같은 예약어를 지정해 주면 
됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;KEY_ALL_ACCESS              아래 모든 예약어를 
만족합니다.&lt;br&gt;KEY_CREATE_LINK             다른 키로부터의 링크를 허락합니다.&lt;br&gt;KEY_CREATE_SUB_KEY 
         서브키의 생성을 허락합니다.&lt;br&gt;KEY_ENUMERATE_SUB_KEYS      서브키의 보여줌을 
허락합니다.&lt;br&gt;KEY_EXECUTE                 서브키의 데이터를 가져오는 것을 
허락합니다.&lt;br&gt;KEY_QUERY_VALUE             서브키의 데이터를 가져오는 것을 허락합니다.&lt;br&gt;KEY_READ 
                   서브키의 데이터를 가져오는 것을 허락합니다.&lt;br&gt;KEY_SET_VALUE               서브키의 
데이터를 지정하는 것을 허락합니다.&lt;br&gt;KEY_WRITE                   서브키의 데이터를 지정하는 것을 허락합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;앞에서 알아본 RegOpenKeyEx()함수의 예약어와 같죠? 일곱번째 파라미터에는 
NULL을 지정하면 되고 여덟번째 파라미터에는 이 키에 대한 핸들을 기억할 키 변수의 핸들을 지정해 주면 됩니다. 마지막 파라미터에는 키에 대한 
결과가 저장될 변수의 주소를 지정해 주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이제 키를 생성하는 함수를 알아보았으니 원하는 네임에 데이터를 지정하는 함수를 알아 
봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegSetValueEx(&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPCTSTR  lpszValueName,&lt;br&gt;    DWORD  dwReserved,&lt;br&gt;    DWORD 
 fdwType,&lt;br&gt;    CONST BYTE *  lpbData,&lt;br&gt;    DWORD  cbData&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;위 함수를 이용해서 원하는 네임과 데이터를 지정해줄수 있는데 각 파라미터의 의미를 알아 
봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;첫번째 파라미터에는 RegCreateKeyEx()함수로 얻은 키 핸들을 지정해주면 되고 
두번째 파라미터에는 네임을 지정해 주면됩니다. 세번째 파라미터에는 NULL을 지정해주면 되고 네번째 파라미터에는 데이터의 타입을 지정해주면 
됩니다. 데이터의 타입은 아래의 예약어를 이용하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;REG_BINARY      바이너리 형태입니다.&lt;br&gt;REG_DWORD       더블워드 
형태입니다.&lt;br&gt;REG_LINK        심볼릭 링크 형태입니다.&lt;br&gt;REG_NONE        아무 형태도 
아닙니다.&lt;br&gt;REG_SZ          문자열의 형태입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;다섯번째 파라미터에는 데이터를 지정해주면 됩니다. 마지막 파라미터에는 데이터의 길이를 지정해 
주면 되구요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 그러면 이번에는 키를 삭제하는 방법을 알아 봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;먼저 지울 키를 RegOpenKeyEx()함수를 이용해서 핸들 형태로 반환을 받아야 합니다. 
그래서 그 핸들을 이용해서 원하는 네임의 데이터를 삭제하면 되죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;원하는 네임의 데이터를 지울 때에는 아래 함수를 사용하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegDeleteValue(&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPTSTR  lpszValue&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;첫번째 파라미터에 지울 네임이 속해 있는 키의 핸들을 지정해 주면 됩니다. 두번째 
파라미터에는 지울 데이터의 네임을 지정해 주면 되구요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이번에는 키 자체를 없애는 함수입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegDeleteKey(&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPCTSTR  lpszSubKey&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;첫번째 파라미터에는 최상위 루트 키의 이름을 지정해주면 되고 두번째 파라미터에는 그 안에 
포함된 지울 서브키의 이름을 지정해 주면 됩니다. 사용방법이 간단하죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 그러면 위에서 배운 함수들을 이용해서 실제로 프로그램을 만들어 봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;오늘은 여기까지 
끝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;  
&lt;/p&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td background=&quot;file:///C:/Documents%20and%20Settings/sjkang/My%20Documents/Downloads/-%E2%91%B8%EB%A3%9E%E4%BB%A5-%20WINAPI/images/table0_over.jpg&quot; height=&quot;25&quot;&gt;
&lt;p&gt;&lt;b&gt;  윈도우 32비트 프로그래밍 47&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;922&quot; bgcolor=&quot;#e5e5e5&quot; height=&quot;93&quot;&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;안녕하세요........돌팔이 황동준입니다.................&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이번시간에는 저번시간에 알아 본 함수들을 이용해서 프로그램을 만들어 보겠습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;아래 프로그램은 레지스트리에 원하는 키를 생성해서 거기에 데이터를 기록한 뒤 실제로 그 
데이터를 가져오고 하는 기능을 가졌습니다. 물론 지우는 기능도 있구요. 앞부분에서 함수를 잘 이해한 분들은 그렇게 어렵지 않을 겁니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;MyMenu MENU&lt;br&gt;BEGIN&lt;br&gt;    POPUP 
&quot;&amp;amp;Registry&quot;&lt;br&gt;    BEGIN&lt;br&gt;        MENUITEM &quot;&amp;amp;Set Registry&quot;, 
100&lt;br&gt;        MENUITEM &quot;&amp;amp;Get Registry&quot;, 200&lt;br&gt;        MENUITEM 
&quot;&amp;amp;Delete Registry&quot;, 300&lt;br&gt;    END&lt;br&gt;END&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;#include &amp;lt;windows.h&gt;&lt;br&gt;#include 
&amp;lt;string.h&gt;&lt;br&gt;#include &amp;lt;stdio.h&gt;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, 
LPARAM);&lt;br&gt;BOOL SetRegistry(void);&lt;br&gt;char* GetRegistry(void);&lt;br&gt;void 
DeleteRegistry(void);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;int WINAPI WinMain&lt;br&gt;(HINSTANCE hInstance, 
HINSTANCE hPrevInstance, LPSTR lpszArg, int nCmdShow)&lt;br&gt;{&lt;br&gt;        static 
char szAppName[] = &quot;Registry Example&quot;;&lt;br&gt;        HWND hWnd;&lt;br&gt;        MSG 
msg;&lt;br&gt;        WNDCLASS WndClass;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        WndClass.style = 
CS_HREDRAW|CS_VREDRAW;&lt;br&gt;        WndClass.lpfnWndProc = 
WndProc;&lt;br&gt;        WndClass.cbClsExtra = 0;&lt;br&gt;        WndClass.cbWndExtra = 
0;&lt;br&gt;        WndClass.hInstance = hInstance;&lt;br&gt;        WndClass.hIcon = 
LoadIcon(NULL, IDI_APPLICATION);&lt;br&gt;        WndClass.hCursor = LoadCursor(NULL, 
IDC_ARROW);&lt;br&gt;        WndClass.hbrBackground = 
GetStockObject(WHITE_BRUSH);&lt;br&gt;        WndClass.lpszMenuName = 
&quot;MyMenu&quot;;&lt;br&gt;        WndClass.lpszClassName = 
szAppName;&lt;br&gt;        if(!RegisterClass(&amp;amp;WndClass))&lt;br&gt;                return 
FALSE;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        hWnd = 
CreateWindow(&lt;br&gt;                szAppName,&lt;br&gt;                szAppName,&lt;br&gt;                WS_OVERLAPPEDWINDOW,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                NULL,&lt;br&gt;                NULL,&lt;br&gt;                hInstance,&lt;br&gt;                NULL&lt;br&gt;        );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        ShowWindow(hWnd, 
nCmdShow);&lt;br&gt;        UpdateWindow(hWnd);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        while(GetMessage(&amp;amp;msg, NULL, 0, 
0))&lt;br&gt;        {&lt;br&gt;            TranslateMessage(&amp;amp;msg);&lt;br&gt;            DispatchMessage(&amp;amp;msg);&lt;br&gt;        }&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        return msg.wParam;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LRESULT CALLBACK&lt;br&gt;WndProc(HWND hWnd, UINT 
message, WPARAM wParam, LPARAM lParam)&lt;br&gt;{&lt;br&gt;        static char 
szBuff[80];&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        switch(message)&lt;br&gt;        {&lt;br&gt;            case 
WM_COMMAND :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                switch(LOWORD(wParam))&lt;br&gt;                {&lt;br&gt;                    case 
100 :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                        if(!SetRegistry())&lt;br&gt;                            MessageBox(hWnd, 
&quot;Create Fail&quot;, &quot;Error&quot;, MB_OK);&lt;br&gt;                        break;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                    case 200 :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                        strcpy(szBuff, 
GetRegistry());&lt;br&gt;                        if(strcmp(szBuff, 
&quot;ERROR&quot;))&lt;br&gt;                            MessageBox(hWnd, szBuff, &quot;&quot;, 
MB_OK);&lt;br&gt;                        else&lt;br&gt;                            MessageBox(hWnd, 
&quot;Value not found!!&quot;, &quot;&quot;, MB_OK);&lt;br&gt;                        break;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                    case 300 :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                        DeleteRegistry();&lt;br&gt;                        break;&lt;br&gt;                }&lt;br&gt;                return 
0;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;            case WM_DESTROY :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                PostQuitMessage(0);&lt;br&gt;                return 
0;&lt;br&gt;        }&lt;br&gt;        return DefWindowProc(hWnd, message, wParam, 
lParam);&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;BOOL SetRegistry(void)&lt;br&gt;{&lt;br&gt;    HKEY 
hKey;&lt;br&gt;    DWORD dwState;&lt;br&gt;    LONG lRet;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, NULL,&lt;br&gt;        NULL, REG_OPTION_NON_VOLATILE, 
KEY_ALL_ACCESS, NULL, &amp;amp;hKey,&lt;br&gt;            &amp;amp;dwState);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;        return FALSE;&lt;br&gt;    lRet = RegSetValueEx(hKey, 
&quot;Install&quot;, NULL, REG_SZ,&lt;br&gt;        (unsigned char *)&quot;c:\\doran20&quot;, 
strlen(&quot;c:\\doran20&quot;));&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;br&gt;    RegCloseKey(hKey);&lt;br&gt;    return TRUE;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;char* GetRegistry(void)&lt;br&gt;{&lt;br&gt;    HKEY 
hKey;&lt;br&gt;    LONG lRet;&lt;br&gt;    DWORD dwByte, dwType;&lt;br&gt;    static char 
szBuff[80];&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, 0,&lt;br&gt;        KEY_ALL_ACCESS, &amp;amp;hKey);&lt;br&gt;    if(lRet 
!= ERROR_SUCCESS)&lt;br&gt;        return &quot;ERROR&quot;;&lt;br&gt;    lRet = RegQueryValueEx(hKey, 
&quot;Install&quot;, 0, &amp;amp;dwType,&lt;br&gt;        (unsigned char *)szBuff, 
&amp;amp;dwByte);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
&quot;ERROR&quot;;&lt;br&gt;    }&lt;br&gt;    RegCloseKey(hKey);&lt;br&gt;    return szBuff;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;void DeleteRegistry(void)&lt;br&gt;{&lt;br&gt;    HKEY 
hKey;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, 0, 
KEY_ALL_ACCESS,&lt;br&gt;        &amp;amp;hKey);&lt;br&gt;    RegDeleteValue(hKey, 
&quot;Install&quot;);&lt;br&gt;    RegDeleteKey(HKEY_LOCAL_MACHINE, &quot;Software\\DORAN 
20&quot;);&lt;br&gt;    RegCloseKey(hKey);&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 프로그램을 실행시켜 첫번째 메뉴 아이템인 Set Registry를 선택해 보세요. 그리고 
진짜로 그 키가 생성되었는지 레지스트리 편집기로 확인해 보시기 바랍니다. 어때요? 정말로 생성되어 있죠? 자 그러면 소스를 보도록 
합시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;제가 만든 세개의 함수 루틴만 보면 되겠네요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;BOOL SetRegistry(void)&lt;br&gt;{&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이 함수는 새로운 키를 생성하는 역할을 합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    HKEY hKey;&lt;br&gt;    DWORD dwState;&lt;br&gt;    LONG 
lRet;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, NULL,&lt;br&gt;        NULL, REG_OPTION_NON_VOLATILE, 
KEY_ALL_ACCESS, NULL, &amp;amp;hKey,&lt;br&gt;            &amp;amp;dwState);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;HKEY_LOCAL_MACHINE 부분에 있는 Software내에 DORAN 20이라는 키를 
생성하고 있는 구문입니다. 물론 Software라는 서브키가 존재하지 않으면 새로 생성합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    if(lRet != ERROR_SUCCESS)&lt;br&gt;        return 
FALSE;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;성공적으로 함수가 수행되면 ERROR_SUCESS라는 리터값이 발생된다는 것을 위 구문으로 
짐작할 수 있을 겁니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegSetValueEx(hKey, &quot;Install&quot;, NULL, 
REG_SZ,&lt;br&gt;        (unsigned char *)&quot;c:\\doran20&quot;, strlen(&quot;c:\\doran20&quot;));&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;Install이라는 네임에 c:\doran20이라는 데이터를 저장하는 구문입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    if(lRet != ERROR_SUCCESS)&lt;br&gt;    {&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;역시 함수가 성공적으로 수행되면 ERROR_SUCCESS라는 리턴값이 발생되는군요.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;br&gt;    RegCloseKey(hKey);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;생성한 키를 닫는 구문입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    return TRUE;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;char* GetRegistry(void)&lt;br&gt;{&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이 함수는 원하는 서브키의 데이터를 가져오는 역할을 합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    HKEY hKey;&lt;br&gt;    LONG lRet;&lt;br&gt;    DWORD 
dwByte, dwType;&lt;br&gt;    static char szBuff[80];&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, 0,&lt;br&gt;        KEY_ALL_ACCESS, &amp;amp;hKey);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;데이터를 가져올 서브키를 열고 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    if(lRet != ERROR_SUCCESS)&lt;br&gt;        return 
&quot;ERROR&quot;;&lt;br&gt;    lRet = RegQueryValueEx(hKey, &quot;Install&quot;, 0, 
&amp;amp;dwType,&lt;br&gt;        (unsigned char *)szBuff, &amp;amp;dwByte);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;Install이라는 네임에 해당하는 데이터를 가져오고 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
&quot;ERROR&quot;;&lt;br&gt;    }&lt;br&gt;    RegCloseKey(hKey);&lt;br&gt;    return szBuff;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;void DeleteRegistry(void)&lt;br&gt;{&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이 함수는 첫번째 메뉴 아이템에 의해 생성된 키와 데이터를 삭제하는 역할을 합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    HKEY hKey;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, 0, KEY_ALL_ACCESS,&lt;br&gt;        &amp;amp;hKey);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;지울 키를 얻고 있습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    RegDeleteValue(hKey, &quot;Install&quot;);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;Install 네임을 가지고 있는 데이터를 삭제하는 구문입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    RegDeleteKey(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;서브 키를 없애는 구문입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    RegCloseKey(hKey);&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;오늘은 여기까지 
끝~~~~~~~~~~~~~~~~~~~~~~~&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;  
&lt;/p&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td background=&quot;file:///C:/Documents%20and%20Settings/sjkang/My%20Documents/Downloads/-%E2%91%B8%EB%A3%9E%E4%BB%A5-%20WINAPI/images/table0_over.jpg&quot; height=&quot;25&quot;&gt;
&lt;p&gt;&lt;b&gt;  윈도우 32비트 프로그래밍 48&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;922&quot; bgcolor=&quot;#e5e5e5&quot; height=&quot;93&quot;&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;안녕하세요............돌팔이 황동준입니다...............&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이번시간에도 레지스트리에 대해 더 알아 보겠습니다. 이번에 알아 볼 것은 어떤 키에 속해있는 
서브키를 어떻게 얻을 수 있는지 입니다. 물론 우리는&lt;br&gt;서브키에 속해 있는 네임에 해당하는 데이터를 얻는 방법은 압니다. 그러나 문제가 
있죠. 바로 이 키에 어떤 서브키가 있는지 모른다면 할 수가 없습니다. 그렇죠? 그렇기 때문에 이 방법을 알아야 합니다. 좀더 들어간다면 어떤 
서브키에 어떤 네임들이 있는지도 아는 방법이 있습니다. 그것도 우리가 지금 알아 볼 방법을 응용하면 됩니다. 자 그러면 시작해 봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;먼저 크게 두단계로 나누어서 합니다. 첫번째 단계는 바로 원하는 키에 서브키가 몇개 있는지 
개수를 알아내는 것입니다. 두번째 단계는 이 개수를 가지고 차례로 키 포인터를 이동시켜 서브키를 얻는 것입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 그러면 실제로 어떤 식으로 구현하는지 필요한 함수를 보도록 합시다. 먼저 서브키의 개수를 
알아야 하는데 이때 필요한 함수의 첫번째 파라미터에 키 핸들을 지정해야 하는데 이 키 핸들은 앞에서 배운 RegOpenKeyEx()함수를 
이용하면 됩니다. 그러면 키의 개수를 얻을 수 있는 함수를 보도록 합시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegQueryInfoKey (&lt;br&gt;    HKEY 
 hkey,&lt;br&gt;    LPTSTR  lpszClass,&lt;br&gt;    LPDWORD  lpcchClass,&lt;br&gt;    LPDWORD 
 lpdwReserved,&lt;br&gt;    LPDWORD  lpcSubKeys,&lt;br&gt;    LPDWORD 
 lpcchMaxSubkey,&lt;br&gt;    LPDWORD  lpcchMaxClass,&lt;br&gt;    LPDWORD 
 lpcValues,&lt;br&gt;    LPDWORD  lpcchMaxValueName,&lt;br&gt;    LPDWORD 
 lpcbMaxValueData,&lt;br&gt;    LPDWORD  lpcbSecurityDescriptor,&lt;br&gt;    PFILETIME 
 lpftLastWriteTime&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;첫번째 파라미터로 RegOpenKeyEx()함수에서 얻은 키 핸들을 지정하면 됩니다. 두번째 
파라미터에는 클래스 이름이 저장될 버퍼의 주소를 세번째 파라미터에는 그 클래스 버퍼의 크기를 가지고 있는 변수의 주소를 지정해 주면 
됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;네번째 파라미터에는 0을 지정하면되고 다섯번째 파라미터인 lpcSubKeys에는 서브키의 
개수가 저장될 변수의 주소를 지정해 주면 됩니다. 여섯번째 파라미터에는 서브키의 이름중 가장 긴 이름을 가진 서브키의 길이가 저장될 변수의 
주소를 지정해주면 됩니다. 사실 이 값은 잘 쓰이지 않죠. 역시 일곱번째 파라미터도 서브키에 대한 클래스이름이 가장 긴 길이가 저장될 변수의 
주소를 지정해주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;여덟번째 파라미터인 lpcValues에는 지정해준 키에 대한 데이터의 개수가 저장 될 변수의 
주소를 지정해주면 되는데 우리가 지금 만들어볼 프로그램은 단지 서브키의 개수만 알아볼거니 사실 이 값이 필요없습니다. 그러나 다음 프로그램에서는 
이 값을 이용할테니 그 의미를 알아 두시기 바랍니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;아홉번째 파라미터에는 가장 긴 네임에 대한 길이가 저장될 변수의 주소를 지정해주면 되고 
열번째 파라미터에는 가장긴 데이터의 길이가 저장될 변수의 주소를 지정해 주면 됩니다. 열한번째 파라미터에는 NULL을 지정하면 되고 마지막 
파라미터에는 주어진 키에대한 시간정보를 저장할 구조체 변수의 주소를 지정해 주면 됩니다. 이 구조체는 이미 앞에서 알아보았고 또 어떻게 
다루었는지도 알아 보았을 겁니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;자 서브키나 데이터의 개수를 위 함수로 알아 냈으니 이번에는 실제로 그 서브키나 데이터가 
무엇인지 알아내는 함수를 알아 봅시다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LONG RegEnumKeyEx(&lt;br&gt;    HKEY  hkey,&lt;br&gt;    DWORD 
 iSubkey,&lt;br&gt;    LPTSTR  lpszName,&lt;br&gt;    LPDWORD  lpcchName,&lt;br&gt;    LPDWORD 
 lpdwReserved,&lt;br&gt;    LPTSTR  lpszClass,&lt;br&gt;    LPDWORD 
 lpcchClass,&lt;br&gt;    PFILETIME  lpftLastWrite&lt;br&gt;   );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;바로 위 함수를 이용해서 알아 낼 수 있습니다. 첫번째 파라미터에 알아낼 서브키가 속해있는 
루트 키의 핸들을 지정해 주면 되고 두번째 파라미터에 서브키의 인덱스를 지정해주면 됩니다. 서브키의 인덱스는 0부터 시작합니다. 예를 들어 
우리가 위의 RegQueryInfoKey() 함수로 서브키의 개수를 알아 내었다면 0부터 차례로 그 개수에서 1을 뺀값까지 이 파라미터로 
지정해주면 되겠죠.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;세번째 파라미터에는 해당하는 인텍스의 서브키가 들어갈 버퍼를 지정해 주면 되고 네번째 
파라미터에는 그 버퍼의 크기가 저장된 변수의 주소를 지정해 주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;다섯번째 파라미터에는 NULL을 지정해 주면 되고 여섯번째 파라미터에는 클래스 이름이 저장될 
버퍼를 지정해주면 됩니다. 일곱번째 파라미터에는 클래스 이름이 저장 될 버퍼의 크기가 저장된 변수의 주소를 지정해 주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;마지막 파라미터는 설명 드릴필요는 없겠군요. 앞의 RegQueryInfoKey() 함수의 
마지막 파라미터와 의미가 같습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;&lt;br&gt;자 그러면 실제로 이것을 이용한 프로그램을 만들어 봅시다. 아래 프로그램은 새로운 
키를 생성하고 그 키에 포함된 서브키가 어떤것들인지 화면에 출력해 주는 기능을 가졌습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;MyMenu MENU&lt;br&gt;BEGIN&lt;br&gt;    POPUP 
&quot;&amp;amp;Registry&quot;&lt;br&gt;    BEGIN&lt;br&gt;        MENUITEM &quot;&amp;amp;Set Registry&quot;, 
100&lt;br&gt;        MENUITEM &quot;&amp;amp;Print Registry&quot;, 200&lt;br&gt;    END&lt;br&gt;END&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;#include &amp;lt;windows.h&gt;&lt;br&gt;#include 
&amp;lt;string.h&gt;&lt;br&gt;#include &amp;lt;stdio.h&gt;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, 
LPARAM);&lt;br&gt;BOOL SetRegistry(void);&lt;br&gt;BOOL PrintSubRegistry(HWND hWnd);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;int WINAPI WinMain&lt;br&gt;(HINSTANCE hInstance, 
HINSTANCE hPrevInstance, LPSTR lpszArg, int nCmdShow)&lt;br&gt;{&lt;br&gt;        static 
char szAppName[] = &quot;Registry Example&quot;;&lt;br&gt;        HWND hWnd;&lt;br&gt;        MSG 
msg;&lt;br&gt;        WNDCLASS WndClass;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        WndClass.style = 
CS_HREDRAW|CS_VREDRAW;&lt;br&gt;        WndClass.lpfnWndProc = 
WndProc;&lt;br&gt;        WndClass.cbClsExtra = 0;&lt;br&gt;        WndClass.cbWndExtra = 
0;&lt;br&gt;        WndClass.hInstance = hInstance;&lt;br&gt;        WndClass.hIcon = 
LoadIcon(NULL, IDI_APPLICATION);&lt;br&gt;        WndClass.hCursor = LoadCursor(NULL, 
IDC_ARROW);&lt;br&gt;        WndClass.hbrBackground = 
GetStockObject(WHITE_BRUSH);&lt;br&gt;        WndClass.lpszMenuName = 
&quot;MyMenu&quot;;&lt;br&gt;        WndClass.lpszClassName = 
szAppName;&lt;br&gt;        if(!RegisterClass(&amp;amp;WndClass))&lt;br&gt;                return 
FALSE;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        hWnd = 
CreateWindow(&lt;br&gt;                szAppName,&lt;br&gt;                szAppName,&lt;br&gt;                WS_OVERLAPPEDWINDOW,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                CW_USEDEFAULT,&lt;br&gt;                NULL,&lt;br&gt;                NULL,&lt;br&gt;                hInstance,&lt;br&gt;                NULL&lt;br&gt;        );&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        ShowWindow(hWnd, 
nCmdShow);&lt;br&gt;        UpdateWindow(hWnd);&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        while(GetMessage(&amp;amp;msg, NULL, 0, 
0))&lt;br&gt;        {&lt;br&gt;            TranslateMessage(&amp;amp;msg);&lt;br&gt;            DispatchMessage(&amp;amp;msg);&lt;br&gt;        }&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        return msg.wParam;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;LRESULT CALLBACK&lt;br&gt;WndProc(HWND hWnd, UINT 
message, WPARAM wParam, LPARAM lParam)&lt;br&gt;{&lt;br&gt;        static char 
szBuff[80];&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;        switch(message)&lt;br&gt;        {&lt;br&gt;            case 
WM_COMMAND :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                switch(LOWORD(wParam))&lt;br&gt;                {&lt;br&gt;                    case 
100 :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                        if(!SetRegistry())&lt;br&gt;                            MessageBox(hWnd, 
&quot;Create Fail&quot;, &quot;Error&quot;, MB_OK);&lt;br&gt;                        break;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                    case 200 :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                        if(!PrintSubRegistry(hWnd))&lt;br&gt;                            MessageBox(hWnd, 
&quot;Print Fail&quot;, &quot;Error&quot;, 
MB_OK);&lt;br&gt;                        break;&lt;br&gt;                }&lt;br&gt;                return 
0;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;            case WM_DESTROY :&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;                PostQuitMessage(0);&lt;br&gt;                return 
0;&lt;br&gt;        }&lt;br&gt;        return DefWindowProc(hWnd, message, wParam, 
lParam);&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;BOOL SetRegistry(void)&lt;br&gt;{&lt;br&gt;    HKEY 
hKey;&lt;br&gt;    DWORD dwState;&lt;br&gt;    LONG lRet;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20\\Install&quot;,&lt;br&gt;        NULL, NULL, REG_OPTION_NON_VOLATILE, 
KEY_ALL_ACCESS, NULL, &amp;amp;hKey,&lt;br&gt;            &amp;amp;dwState);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;        return FALSE;&lt;br&gt;    lRet = RegSetValueEx(hKey, 
&quot;Install&quot;, NULL, REG_SZ,&lt;br&gt;        (unsigned char *)&quot;c:\\doran20&quot;, 
strlen(&quot;c:\\doran20&quot;));&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;br&gt;    lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20\\Version&quot;,&lt;br&gt;        NULL, NULL, REG_OPTION_NON_VOLATILE, 
KEY_ALL_ACCESS, NULL, &amp;amp;hKey,&lt;br&gt;            &amp;amp;dwState);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;        return FALSE;&lt;br&gt;    lRet = RegSetValueEx(hKey, 
&quot;Version&quot;, NULL, REG_SZ,&lt;br&gt;        (unsigned char *)&quot;2.0&quot;, 
strlen(&quot;2.0&quot;));&lt;br&gt;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;br&gt;    RegCloseKey(hKey);&lt;br&gt;    return TRUE;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;BOOL PrintSubRegistry(HWND hWnd)&lt;br&gt;{&lt;br&gt;    HDC 
hDC;&lt;br&gt;    HKEY hKey;&lt;br&gt;    LONG lRet;&lt;br&gt;    DWORD dwSubKeyNumber, dwCount, 
dwSubKeySize = 80;&lt;br&gt;    FILETIME FileTime;&lt;br&gt;    static char 
szSubKey[80];&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20&quot;, 0,&lt;br&gt;        KEY_ALL_ACCESS, &amp;amp;hKey);&lt;br&gt;    if(lRet 
!= ERROR_SUCCESS)&lt;br&gt;        return FALSE;&lt;br&gt;    lRet = RegQueryInfoKey(hKey, 
NULL, 0, 0, &amp;amp;dwSubKeyNumber, NULL, NULL,&lt;br&gt;        NULL, NULL, NULL, NULL, 
&amp;amp;FileTime);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;br&gt;    dwCount = 
0;&lt;br&gt;    do&lt;br&gt;    {&lt;br&gt;        RegEnumKeyEx(hKey, dwCount, szSubKey, 
&amp;amp;dwSubKeySize, NULL,&lt;br&gt;            NULL, 0, 
&amp;amp;FileTime);&lt;br&gt;        dwSubKeySize = 80;&lt;br&gt;        hDC = 
GetDC(hWnd);&lt;br&gt;        TextOut(hDC, 0, 20*dwCount, szSubKey, 
strlen(szSubKey));&lt;br&gt;        ReleaseDC(hWnd, 
hDC);&lt;br&gt;        dwCount++;&lt;br&gt;    } 
while(dwCount&amp;lt;dwSubKeyNumber);&lt;br&gt;    RegCloseKey(hKey)&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;;&lt;br&gt;    return TRUE;&lt;br&gt;}&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;오늘은 여기까지 
끝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;  
&lt;/p&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td background=&quot;file:///C:/Documents%20and%20Settings/sjkang/My%20Documents/Downloads/-%E2%91%B8%EB%A3%9E%E4%BB%A5-%20WINAPI/images/table0_over.jpg&quot; height=&quot;25&quot;&gt;
&lt;p&gt;&lt;b&gt;  윈도우 32비트 프로그래밍 49&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;922&quot; bgcolor=&quot;#e5e5e5&quot; height=&quot;93&quot;&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;안녕하세요.............돌팔이 
황동준입니다.....................&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이번시간에는 저번시간에 만든 프로그램을 분석해 보겠습니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;제가 만든 두개의 함수만 알아 보면 되겠죠?&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;BOOL SetRegistry(void)&lt;br&gt;{&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;이 함수는 우리가 어떤 서브키가 있는지 테스트해보기 위해 임시로 서브키를 만드는 기능을 
합니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    HKEY hKey;&lt;br&gt;    DWORD dwState;&lt;br&gt;    LONG 
lRet;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20\\Install&quot;,&lt;br&gt;        NULL, NULL, REG_OPTION_NON_VOLATILE, 
KEY_ALL_ACCESS, NULL, &amp;amp;hKey,&lt;br&gt;            &amp;amp;dwState);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;        return FALSE;&lt;br&gt;    lRet = RegSetValueEx(hKey, 
&quot;Install&quot;, NULL, REG_SZ,&lt;br&gt;        (unsigned char *)&quot;c:\\doran20&quot;, 
strlen(&quot;c:\\doran20&quot;));&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;어떤 서브키를 만드는지 굳이 설명드릴 필요는 없죠? 바로 Install이라는 서브키를 만들고 
Install이라는 네임에 c:\doran20이라는 데이터를 저장하고 있는 구문입니다.&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
&quot;Software\\DORAN 20\\Version&quot;,&lt;br&gt;        NULL, NULL, REG_OPTION_NON_VOLATILE, 
KEY_ALL_ACCESS, NULL, &amp;amp;hKey,&lt;br&gt;            &amp;amp;dwState);&lt;br&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;        return FALSE;&lt;br&gt;    lRet = RegSetValueEx(hKey, 
&quot;Version&quot;, NULL, REG_SZ,&lt;br&gt;        (unsigned char *)&quot;2.0&quot;, strlen(&quot;2.0&quot;));&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;    if(lRet != 
ERROR_SUCCESS)&lt;br&gt;    {&lt;br&gt;        RegCloseKey(hKey);&lt;br&gt;        return 
FALSE;&lt;br&gt;    }&lt;br&gt;    RegCloseKey(hKey);&lt;br&gt;    return TRUE;&lt;/p&gt;
&lt;p style=&quot;LINE-HEIGHT: 150%&quot;&gt;앞에서 만든 DORAN 20이라는 서브키에 다시 Version이라는 서브키를 생성하고 네임에 
Version을 그 네임