/// <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())); }
/// <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); }
/// <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; }