コード例 #1
0
        /// <summary>
        /// Recupera o nome do contrato do <see cref="MemberInfo"/> e <see cref="ExportDescription"/>.
        /// </summary>
        /// <param name="memberGetter">Informações sobre o membro.</param>
        /// <param name="exportDescription">Informações sobre a definição de export.</param>
        /// <returns>Nome do contrato.</returns>
        public static string GetContractNameFromExportDescription(Func <MemberInfo> memberGetter, ExportDescription exportDescription)
        {
            memberGetter.Require("member").NotNull();
            exportDescription.Require("exportDescription").NotNull();
            if (!string.IsNullOrEmpty(exportDescription.ContractName))
            {
                return(exportDescription.ContractName);
            }
            if (exportDescription.ContractTypeName != null)
            {
                return(exportDescription.ContractTypeName.FullName);
            }
            if (exportDescription.ContractType != null)
            {
                return(AttributedModelServices.GetContractName(exportDescription.ContractType));
            }
            var memberValue = memberGetter();

            if (memberValue == null)
            {
                throw new InvalidOperationException("member is null");
            }
            if (memberValue.MemberType == MemberTypes.Method)
            {
                return(AttributedModelServices.GetTypeIdentity((MethodInfo)memberValue));
            }
            return(AttributedModelServices.GetContractName(memberValue.GetDefaultTypeFromMember()));
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="memberGetter"></param>
        /// <param name="exportDescription"></param>
        /// <param name="creationPolicy"></param>
        /// <returns></returns>
        public static IDictionary <string, object> GetMetadataFromExportDescription(Func <MemberInfo> memberGetter, ExportDescription exportDescription, CreationPolicy creationPolicy)
        {
            memberGetter.Require("member").NotNull();
            exportDescription.Require("exportDescription").NotNull();
            var metadata = new Dictionary <string, object>();
            var contract = GetTypeIdentityFromExportDescription(memberGetter, exportDescription);

            metadata.Add(System.ComponentModel.Composition.Hosting.CompositionConstants.ExportTypeIdentityMetadataName, contract);
            if (creationPolicy != CreationPolicy.Any)
            {
                metadata.Add("System.ComponentModel.Composition.CreationPolicy", creationPolicy);
            }
            if (exportDescription.Metadata != null)
            {
                foreach (var pair in exportDescription.Metadata)
                {
                    metadata.Add(pair.Key, pair.Value);
                }
            }
            return(metadata);
        }
コード例 #3
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="memberGetter">Referencia do método usado para recuperar o membro.</param>
 /// <param name="exportDescription"></param>
 /// <param name="creationPolicy">Política de criação.</param>
 public ProviderExportDefinition(Func <System.Reflection.MemberInfo> memberGetter, ExportDescription exportDescription, System.ComponentModel.Composition.CreationPolicy creationPolicy) : base(CompositionServices.GetContractNameFromExportDescription(memberGetter, exportDescription), CompositionServices.GetMetadataFromExportDescription(memberGetter, exportDescription, creationPolicy))
 {
     memberGetter.Require("member").NotNull();
     exportDescription.Require("exportDescription").NotNull();
     _memberGetter = memberGetter;
 }