Junil, Um (엄준일)
Microsoft Team System MVP
Blog : http://blog.powerumc.kr
Company :
.NETXPERT

소개

MEFGeneric 은 MEF(Managed Extensibility Framework) 를 이용하여 CLR 제네릭 타입을 지원하도록 개선한 프레임워크입니다.

배경

MEF 는 Generic Type 을 지원하지 않습니다. 그래서 Generic Type 의 클래스는 MEF 를 이용하여 Composition 할 수 없습니다. 하지만 MEFGeneric 은 MEF 소스 코드를 변경/확장하여 Generic Type 을 지원합니다.

예제

아래의 소스 코드는 기존 MEF 에서는 불가능하고, MEFGeneric 을 이용해야만 객체를 얻거나 조합을 할 수 있습니다.

Catalog and Composition
var catalog = new AggregateCatalog(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
var genericCatalog = new GenericCatalog(catalog);
var container = new CompositionContainer(genericCatalog);

Export Definition
public interface IUMC<T>
{
	void Say();
}

// 중요 : MEFGeneric 에서만 IUMC<> 제네릭 타입을 선언할 수 있습니다.
[Export(typeof(IUMC<>))]
public class UMC<T> : IUMC<T>
{
	#region IUMC<T> 멤버

	public void Say()
	{
		Console.WriteLine(typeof(T).FullName);
	}

	#endregion
}

Container Resolving / Injection
container.GetExportedValueOrDefault<IUMC<int>>().Say();
container.GetExportedValueOrDefault<IUMC<string>>().Say();

Last edited Feb 16, 2010 at 8:01 AM by umjunil, version 5

Comments

No comments yet.