/// <summary> /// Construtor padrão. /// </summary> /// <param name="catalog"></param> /// <param name="typeName"></param> /// <param name="exportDefinitions"></param> /// <param name="importDefinitions"></param> /// <param name="parameterImportDefinitions"></param> /// <param name="partCreationPolicy"></param> /// <param name="useDispatcher"></param> public ProviderComposablePartDefinition(ComposablePartCatalog catalog, Colosoft.Reflection.TypeName typeName, IList <ProviderExportDefinition> exportDefinitions, Lazy <IEnumerable <ImportDefinition> > importDefinitions, ProviderParameterImportDefinitionContainer parameterImportDefinitions, System.ComponentModel.Composition.CreationPolicy partCreationPolicy, bool useDispatcher) { _exports = exportDefinitions.Cast <ExportDefinition>().ToArray(); _imports = importDefinitions; _parameterImportDefinitions = parameterImportDefinitions; _catalog = catalog; _typeName = typeName; _partCreationPolicy = partCreationPolicy; _useDispatcher = useDispatcher; }
private void DiscoverTypes(IEnumerable <ContractInfo> contracts) { lock (_lock) { if (_catalogCollection == null) { _catalogCollection = new AggregateCatalog(); } var exports = new List <Tuple <ContractInfo, Colosoft.Reflection.Composition.IExport> >(); foreach (var i in contracts) { if (i.Types.Count == 0) { var tuple = new Tuple <ContractInfo, Reflection.Composition.IExport>(i, ExportManager.GetExport(i.ContractType, i.ContractName, _uiContext)); if (tuple.Item2 != null) { exports.Add(tuple); } } else { var contractExports = ExportManager.GetExports(i.ContractType, i.ContractName, _uiContext); int contractCount = 0; foreach (var j in contractExports) { if (i.Types.Contains(j.Type, Colosoft.Reflection.TypeName.TypeNameEqualityComparer.Instance)) { contractCount++; var tuple = new Tuple <ContractInfo, Reflection.Composition.IExport>(i, j); exports.Add(tuple); } } } } if (exports.Count > 0) { var pkgParts = new List <Colosoft.Reflection.AssemblyPart>(); var partDescriptions = new List <PartDescription>(); foreach (var i in exports) { var assemblyPart = new Colosoft.Reflection.AssemblyPart(string.Format("{0}.dll", i.Item2.Type.AssemblyName.Name)); if (!pkgParts.Exists(f => StringComparer.InvariantCultureIgnoreCase.Equals(f.Source, assemblyPart.Source))) { pkgParts.Add(assemblyPart); } System.ComponentModel.Composition.CreationPolicy creationPolicy = System.ComponentModel.Composition.CreationPolicy.Any; switch (i.Item2.CreationPolicy) { case Reflection.Composition.CreationPolicy.NonShared: creationPolicy = System.ComponentModel.Composition.CreationPolicy.NonShared; break; case Reflection.Composition.CreationPolicy.Shared: creationPolicy = System.ComponentModel.Composition.CreationPolicy.Shared; break; } ImportingConstructorDescription importingConstructor = null; if (i.Item2.ImportingConstructor) { importingConstructor = new ImportingConstructorDescription(i.Item2.Type, null); } var partDescription = new PartDescription(i.Item2.Type, new ExportDescription[] { new ExportDescription { ContractTypeName = i.Item1.ContractType, ContractName = string.IsNullOrEmpty(i.Item2.ContractName) ? null : i.Item2.ContractName.Trim(), Metadata = i.Item2.Metadata } }, new ImportDescription[0], i.Item2.UseDispatcher, importingConstructor, creationPolicy); partDescriptions.Add(partDescription); } var catalog = new DefinitionCatalog(new DiscoverAssembliesContainer(this, _assemblyRepository, pkgParts.ToArray(), exports), partDescriptions); var addedDefinitions = catalog.Parts; using (AtomicComposition composition = new AtomicComposition()) { var args = new ComposablePartCatalogChangeEventArgs(addedDefinitions, Enumerable.Empty <ComposablePartDefinition>(), composition); this.OnChanging(args); _catalogCollection.Catalogs.Add(catalog); composition.Complete(); } ComposablePartCatalogChangeEventArgs e = new ComposablePartCatalogChangeEventArgs(addedDefinitions, Enumerable.Empty <ComposablePartDefinition>(), null); this.OnChanged(e); } } }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="parameter"></param> /// <param name="importDescription"></param> /// <param name="creationPolicy"></param> public ProviderParameterImportDefinition(System.Reflection.ParameterInfo parameter, ImportDescription importDescription, System.ComponentModel.Composition.CreationPolicy creationPolicy) : base(CompositionServices.GetContractNameFromImportDescription(parameter, importDescription), CompositionServices.GetTypeIdentityFromImportDescription(parameter, importDescription), CompositionServices.GetMetadataFromImportDescription(parameter, importDescription), System.ComponentModel.Composition.Primitives.ImportCardinality.ExactlyOne, importDescription.Recomposable, importDescription.Prerequisite, creationPolicy) { parameter.Require("parameter").NotNull(); importDescription.Require("importDescription").NotNull(); this.AllowDefault = importDescription.AllowDefault; this.Parameter = parameter; }
public System.ComponentModel.Composition.Registration.ImportBuilder RequiredCreationPolicy(System.ComponentModel.Composition.CreationPolicy requiredCreationPolicy) { throw null; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="member"></param> /// <param name="importDescription"></param> /// <param name="creationPolicy">Política de criação.</param> public ProviderImportDefinition(Lazy <MemberInfo> member, ImportDescription importDescription, System.ComponentModel.Composition.CreationPolicy creationPolicy) : base(CompositionServices.GetContractNameFromImportDescription(member, importDescription), CompositionServices.GetTypeIdentityFromImportDescription(member, importDescription), CompositionServices.GetMetadataFromImportDescription(member, importDescription), GetCardinality(member, importDescription.AllowDefault), importDescription.Recomposable, importDescription.Prerequisite, creationPolicy) { member.Require("member").NotNull(); importDescription.Require("importDescription").NotNull(); this.AllowDefault = importDescription.AllowDefault; _member = member; }
public System.ComponentModel.Composition.Registration.PartBuilder SetCreationPolicy(System.ComponentModel.Composition.CreationPolicy creationPolicy) { throw null; }
/// <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; }
public static System.ComponentModel.Composition.Primitives.ContractBasedImportDefinition CreateImportDefinition(LazyMemberInfo importingMember, string contractName, string requiredTypeIdentity, IEnumerable <KeyValuePair <string, Type> > requiredMetadata, System.ComponentModel.Composition.Primitives.ImportCardinality cardinality, bool isRecomposable, System.ComponentModel.Composition.CreationPolicy requiredCreationPolicy, System.ComponentModel.Composition.Primitives.ICompositionElement origin) { Contract.Requires(contractName != null); Contract.Ensures(Contract.Result <System.ComponentModel.Composition.Primitives.ContractBasedImportDefinition>() != null); return(default(System.ComponentModel.Composition.Primitives.ContractBasedImportDefinition)); }
/// <summary> /// Construtor de inicialização. /// </summary> /// <param name="typeName"></param> /// <param name="exports"></param> /// <param name="imports"></param> /// <param name="useDispatcher"></param> /// <param name="importingConstruct"></param> /// <param name="partCreationPolicy"></param> public PartDescription(Colosoft.Reflection.TypeName typeName, IEnumerable <ExportDescription> exports, IEnumerable <ImportDescription> imports, bool useDispatcher, ImportingConstructorDescription importingConstruct = null, System.ComponentModel.Composition.CreationPolicy partCreationPolicy = System.ComponentModel.Composition.CreationPolicy.Shared) { this.UseDispatcher = useDispatcher; this.Exports = exports; this.Imports = imports; this.ImportingConstructor = importingConstruct; this.TypeName = typeName; this.PartCreationPolicy = partCreationPolicy; }
public ContractBasedImportDefinition(string contractName, string requiredTypeIdentity, IEnumerable <KeyValuePair <string, Type> > requiredMetadata, ImportCardinality cardinality, bool isRecomposable, bool isPrerequisite, System.ComponentModel.Composition.CreationPolicy requiredCreationPolicy) { Contract.Requires(!string.IsNullOrEmpty(contractName)); }