Beispiel #1
0
        /// <summary>
        /// Recupera os tipos que implementam os exports do tipo informado.
        /// </summary>
        /// <param name="type">Tipo que será analisado.</param>
        /// <param name="contractName"></param>
        /// <returns></returns>
        public IEnumerable <Type> GetExportTypes(Type type, string contractName)
        {
            IEnumerable <System.ComponentModel.Composition.Primitives.ExportDefinition> definitions = null;

            if (ExportProviderExtensions.TryGetExportDefintions(_exportProvider, type, contractName, out definitions))
            {
                foreach (var definition in definitions)
                {
                    var providerDefintion = definition as ProviderExportDefinition;
                    if (providerDefintion != null)
                    {
                        var member = providerDefintion.Member;
                        switch (member.MemberType)
                        {
                        case System.Reflection.MemberTypes.Field:
                            yield return(((System.Reflection.FieldInfo)member).FieldType);

                            break;

                        case System.Reflection.MemberTypes.Method:
                            yield return(((System.Reflection.MethodInfo)member).ReturnType);

                            break;

                        case System.Reflection.MemberTypes.Property:
                            yield return(((System.Reflection.PropertyInfo)member).PropertyType);

                            break;

                        case System.Reflection.MemberTypes.Constructor:
                            yield return(((System.Reflection.ConstructorInfo)member).DeclaringType);

                            break;

                        case System.Reflection.MemberTypes.NestedType:
                        case System.Reflection.MemberTypes.TypeInfo:
                            yield return((Type)member);

                            break;
                        }
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Pré-configura os exports do tipo informado.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="contractName"></param>
        /// <param name="result"></param>
        public void PreConfigure(Type type, string contractName, out PreConfigureResult result)
        {
            var notFoundTypes = new List <Type>();
            var types         = new List <Type>()
            {
                type
            };

            for (var i = 0; i < types.Count; i++)
            {
                IEnumerable <System.ComponentModel.Composition.Primitives.ExportDefinition> definitions = null;
                if (ExportProviderExtensions.TryGetExportDefintions(_exportProvider, types[i], contractName, out definitions))
                {
                    foreach (var definition in definitions)
                    {
                        var providerDefintion = definition as ProviderExportDefinition;
                        if (providerDefintion != null)
                        {
                            var member = providerDefintion.Member;
                            if (member is System.Reflection.ConstructorInfo)
                            {
                                var ci = (System.Reflection.ConstructorInfo)member;
                                foreach (var parameter in ci.GetParameters())
                                {
                                    if (!types.Contains(parameter.ParameterType))
                                    {
                                        types.Add(parameter.ParameterType);
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    notFoundTypes.Add(types[i]);
                }
                contractName = null;
            }
            result = new PreConfigureResult(notFoundTypes.Count == 0, notFoundTypes.ToArray());
        }