/// <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;
 }
Example #2
0
        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;
 }
Example #5
0
 /// <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;
 }
Example #7
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;
 }
        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));
        }
Example #9
0
 /// <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));
 }