문제

나는 새로운 것과 놀고있다 System.componentmodel.composition .NET 4.0 베타 2의 네임 스페이스, 관리 확장 성 프레임 워크.

다음 C# 예를 사용합니다. 여기서 a Monkey 수입 a Banana:

public interface IBanana 
{ 
}

[Export(typeof(IBanana))]
public class Banana : IBanana 
{ 
} 

public class Monkey
{
    [Import(typeof(IBanana))]
    public IBanana Banana { get; set; }
}

그러나, 내가 원숭이를 다음과 같이 작곡하려고 할 때 나는 InvalidOperationException 메시지와 함께 "이 개체는 초기화되지 않았습니다. 속성 '소스 프로보더'를 설정해야합니다.":

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
var monkey = new Monkey();
container.ComposeParts(monkey);

내가 여기서 무엇을 놓치고 있습니까? 카탈로그를 CatelogexportProvider로 감싸지 않고 직접 카탈로그를 전달할 수 있다는 것을 알고 있지만 위의 작동도 작동하지 않아야합니까?

도움이 되었습니까?

해결책

CatalogexportProvider는 컨테이너에 대한 참조가 필요합니다. 다음 코드는 작동해야합니다.

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
exportProvider.SourceProvider = container;
var monkey = new Monkey();
container.ComposeParts(monkey);

컨테이너는 카탈로그를 생성자로 전달할 때 자동으로 수행합니다. 카탈로그 포트 프로보더를 수동으로 만들어야 할 이유가 많지 않다고 생각합니다.

CatalogexportProvider가 컨테이너에 대한 참조가 필요한 이유는 컨테이너가 연결되어있는 다른 수출 제공 업체가 만족 해야하는 수입품이있는 카탈로그에 부품이있을 수 있기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top