MEF Exception“ 'SourceProvider'가 설정되어야합니다.”
-
20-09-2019 - |
문제
나는 새로운 것과 놀고있다 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가 컨테이너에 대한 참조가 필요한 이유는 컨테이너가 연결되어있는 다른 수출 제공 업체가 만족 해야하는 수입품이있는 카탈로그에 부품이있을 수 있기 때문입니다.
제휴하지 않습니다 StackOverflow