2011-02-24 2 views
3

인스턴스화 된 객체 대신 유형별로 바인딩하고 싶습니다.C# MEF 형식 바인딩을 수행 할 수 없습니다?

내가 지금해야 할 :

var catalog = new AssemblyCatalog(typeof(...).Assembly); 

var container = new CompositionContainer(catalog); 
    var batch = new CompositionBatch(); 
var mySamurai = new Samurai(); 
batch.AddPart(mySamurai);//I would prefer the type not an object...  
    container.Compose(batch); 
mySamurai.Attack(); 

의 작동하지만 내가 좋아하는 뭔가를하고 싶으면 :

var catalog = new AssemblyCatalog(typeof(...).Assembly); 
var container = new CompositionContainer(catalog); 
var batch = new CompositionBatch(); 

batch.AddPart(typeof(Samurai));//HERE container.Compose(batch);   
var mySamurai = new Samurai(); 
mySamurai.Attack(); 

하는 MEF와 그 수 있습니까?

답변

1

일반적으로 Ninject와 같은 코드에서 구성하지 않고 속성을 사용하여 MEF에서 내보내기 및 가져 오기를 설정합니다.

MEF가 "코드에서 구성"을 즉시 사용하지는 않지만 factory export provider으로도 MEFContrib 프로젝트를 사용할 수 있습니다.

업데이트 : in MEF2-Preview3 attribute-less registration이 추가되었습니다.

또한 Mark Seemann blogged은 새로운 속성없는 등록을 사용하지 않고도 속성 내보내기 및 제네릭을 영리하게 사용하여 유형을 "등록"하는 방법에 대해 설명합니다.

1

정확하게 이해하고 있다면이를 수행 할 방법이 없습니다. MEF는 fakeEntity2를 볼 때 아무 것도 할 수 없습니다. MEF는 결코 실제로 "본"것이 아니기 때문입니다. fakeEntity를 사용하는 것처럼 컨테이너에 전달해야하거나 FakeEntity 클래스를 내 보내서 컨테이너에서 가져 오는 것이 좋습니다 (예 : GetExportedValue 사용).

+0

나는 MEF에 FakeEntityInheritEntity의 종류를 바인드하여 그 유형을 주입하려고합니다. –

+0

내 질문이 더 정확하도록 변경했습니다. –

+0

@Daok 당신은 그렇게 할 수 없습니다. MEF가 독자적으로 작성한 오브젝트에 대해 MEF가 완전히 알 수있는 방법은 없습니다. '사무라이 '에'ExportAttribute'를 추가하고'container.GetExportedValue ()'를 부를 수 있습니다. –

0

MEF에 대해 많이 알지는 못하지만 상황은 Ninject, Unity, StuctureMap, Castle Windsor 등의 IoC 컨테이너와 비슷합니다.

관련 문제