我剛剛開始使用Managed Extensibility框架。我有一個導出的類和一個導入語句:帶有ImportMany和ExportMetadata的MEF
[Export(typeof(IMapViewModel))]
[ExportMetadata("ID",1)]
public class MapViewModel : ViewModelBase, IMapViewModel
{
}
[ImportMany(typeof(IMapViewModel))]
private IEnumerable<IMapViewModel> maps;
private void InitMapView()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(ZoneDetailsViewModel).Assembly));
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
foreach (IMapViewModel item in maps)
{
MapView = (MapViewModel)item;
}
}
這工作得很好。 IEnumerable獲取導出的類。不,我試圖改變這種使用懶列表,包括元數據,以便我可以篩選出我需要的類(相同的出口如前)
[ImportMany(typeof(IMapViewModel))]
private IEnumerable<Lazy<IMapViewModel,IMapMetaData>> maps;
private void InitMapView()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(ZoneDetailsViewModel).Assembly));
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
foreach (Lazy<IMapViewModel,IMapMetaData> item in maps)
{
MapView = (MapViewModel)item.Value;
}
}
這個了IEnumerable沒有元素之後。我懷疑我在某個地方犯了一個明顯而愚蠢的錯誤..
你的元數據接口是什麼樣的? – 2011-02-05 23:36:56
不知道你可以做一個ImportMany包括元數據。太好了! – juFo 2012-07-17 21:14:44