Example #1
0
        /// <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));
        }
Example #2
0
File: MEF.cs Project: blqw/blqw.IOC
        /// <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);
        }