/// <summary> /// 根据导入描述获,和返回类型取导出插件的值 /// </summary> /// <param name="import">导入描述</param> /// <returns></returns> private static object GetExportedValue(ImportDefinitionImpl import) { var exports = Container.GetExports(import); if (import.Cardinality == ImportCardinality.ZeroOrMore) { if (import.MemberType.IsArray || import.MemberType.IsInterface) { var list = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(import.ExportedType)); foreach (var export in exports) { object value = ConvertExportedValue(export.Value, import.ExportedType); if (value != null) { list.Add(value); } } if (import.MemberType.IsArray) { var array = Array.CreateInstance(import.ExportedType, list.Count); list.CopyTo(array, 0); return(array); } return(list); } else { dynamic list = Activator.CreateInstance(import.MemberType); foreach (var export in exports) { dynamic value = ConvertExportedValue(export.Value, import.ExportedType); if (value != null) { list.Add(value); } } return(list); } } return(ConvertExportedValue(exports.FirstOrDefault()?.Value, import.ExportedType)); }
/// <summary> /// 根据导入描述获,和返回类型取导出插件的值 /// </summary> /// <param name="import"> 导入描述 </param> /// <returns> </returns> private static object GetExportedValue(ImportDefinitionImpl import) { var exports = Container.GetExports(import); if (import.Cardinality == ImportCardinality.ZeroOrMore) { if (import.MemberType.IsArray || import.MemberType.IsInterface) { var list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(import.ExportedType)); foreach (var export in exports) { var value = ConvertExportedValue(() => export.Value, import.ExportedType); if (value != null) { list.Add(value); } } if (import.MemberType.IsArray) { var array = Array.CreateInstance(import.ExportedType, list.Count); list.CopyTo(array, 0); return array; } return list; } else { dynamic list = Activator.CreateInstance(import.MemberType); foreach (var export in exports) { dynamic value = ConvertExportedValue(() => export.Value, import.ExportedType); if (value != null) { list.Add(value); } } return list; } } return ConvertExportedValue(() => exports.FirstOrDefault()?.Value, import.ExportedType); }