我真的不懂。
说我有一些具有相同界面的类,我想导出。
[Export(typeof(IService))]
[ExportMetadata("ExportType", typeof(Service1))]
public class Service1 : IService
{...}
[Export(typeof(IService))]
[ExportMetadata("ExportType", typeof(Service2))]
public class Service2 : IService
{...}
[Export(typeof(IService))]
[ExportMetadata("ExportType", typeof(Service3))]
public class Service3 : IService
{...}
现在我有一个导入IService的类,这个类与服务无关。
public class Blup
{
[ImPortingConstructor]
public Blup(IService service)
{}
}
我现在尝试实现的是构建一个ExportProvider,它在Compose上选择正确的Export。
这样的事情:
public TypeExportProvider<TTypeToExport>() : ExportProvider
{}
我真的不知道如何
protected override IEnumerable<Export> GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
应该是这样的。也许有人知道博客可以阅读这个。有很多自定义的ExportProvider样本,但不适用于这种情况。
THX
答案 0 :(得分:2)
嗨肯特,如果你看一下导出有名为“ExportType”的元数据,这应该是自定义exportprovider的选择器。 但在这里发布后,发现了一个来自glenn block的博客文章。所以为了我的特殊目的,我必须这样做:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var defaults = new CatalogExportProvider(new TypeCatalog(typeof(Service2)));
var container = new CompositionContainer(catalog, defaults);
defaults.SourceProvider = container;
如果能够编写一个从元数据信息中选择正确导出的自定义exportprovider,那就更好了。我的问题是如何从ImportDefnition中选择正确的信息,以及如何在GetExportsCore()中设置新的Export(...)。
答案 1 :(得分:0)
此MSDN Magazine article说明了如何检索和使用导出元数据。基本上,您使用CompositionContainer上的GetExports()方法来获取类型和元数据,然后允许您根据元数据值选择类型。