コード例 #1
0
ファイル: Addin.cs プロジェクト: liyang-love/JointCode.AddIns
        internal Addin(Dictionary <Guid, Addin> guid2Addins, RuntimeSystem runtimeSystem,
                       AddinIndexRecord addinIndex)
        {
            var addinFileSystem = new AddinFileSystem(guid2Addins, addinIndex);

            _adnContext = new AddinContext(runtimeSystem, addinFileSystem);
        }
コード例 #2
0
        void FindAndRegisterReferencedAssemblies(AddinIndexRecord addinIndex)
        {
            List <AddinIndexRecord> referencedAddinIndexes;

            if (!_indexManager.TryGetAllReferencedAddins(addinIndex, out referencedAddinIndexes))
            {
                throw new InvalidOperationException();
            }

            if (referencedAddinIndexes != null)
            {
                foreach (var referencedAddinIndex in referencedAddinIndexes)
                {
                    Addin referencedAddin;
                    if (!_guid2Addins.TryGetValue(addinIndex.Guid, out referencedAddin))
                    {
                        referencedAddin = new Addin(_guid2Addins, _runtimeSystem, addinIndex);
                        _guid2Addins.Add(addinIndex.Guid, referencedAddin);
                    }
                    RegisterAddinAssemblies(referencedAddinIndex);
                }
            }

            // register assemblies of the declaring addin
            RegisterAddinAssemblies(addinIndex);
        }
コード例 #3
0
        Addin GetOrCreateAddin(AddinIndexRecord addinIndex)
        {
            Addin addin;

            if (!_guid2Addins.TryGetValue(addinIndex.Guid, out addin))
            {
                AddinBodyRecord addinBody;
                if (!_bodyRepo.TryGet(addinIndex.Guid, out addinBody))
                {
                    return(null);
                }
                addin = new Addin(_guid2Addins, _runtimeSystem, addinIndex)
                {
                    AddinBodyRecord = addinBody
                };
                _guid2Addins.Add(addinIndex.Guid, addin);
            }
            else if (addin.AddinBodyRecord == null)
            {
                AddinBodyRecord addinBody;
                if (!_bodyRepo.TryGet(addinIndex.AddinId.Guid, out addinBody))
                {
                    return(null);
                }
                addin.AddinBodyRecord = addinBody;
            }
            return(addin);
        }
コード例 #4
0
 // register assemblies of the given addin to the assembly resolver, for getting them ready to be loaded into runtime.
 void RegisterAddinAssemblies(AddinIndexRecord addinIndex)
 {
     if (addinIndex.AssembliesRegistered || addinIndex.AssemblyFiles == null)
     {
         return;
     }
     if (addinIndex.AssemblyFiles != null)
     {
         _asmResolver.RegisterAssemblies(addinIndex.AddinDirectory, addinIndex.AssemblyFiles);
     }
     addinIndex.AssembliesRegistered = true;
 }
コード例 #5
0
        AddinResolution DoRegisterExistingAddin(IMessageDialog dialog, ResolutionContext ctx, AddinCollision addinCollision,
                                                AddinIndexRecord existingAddin, List <AddinResolution> adnResolutions)
        {
            AddinBodyRecord addinBody;

            if (!_bodyRepo.TryGet(existingAddin.Guid, out addinBody))
            {
                throw new InconsistentStateException();
            }

            _indexManager.RemoveAddin(existingAddin);
            _bodyRepo.Remove(addinBody);

            if (existingAddin.OperationStatus == AddinOperationStatus.Updated)
            {
                var ebs = addinBody.GetAllExtensionBuilders();
                if (ebs != null)
                {
                    foreach (var eb in ebs)
                    {
                        if (eb.ExtensionBuilderKind == ExtensionBuilderKind.Declared)
                        {
                            ctx.RegisterExtensionBuilderPath(eb.Uid, eb.GetPath());
                        }
                    }
                }
                return(null);
            }

            var adnResolution = FromPersistentObject(new AddinRecord {
                AddinBody = addinBody, AddinIndex = existingAddin
            });

            TryRegisterAddin(dialog, ctx, adnResolution, addinCollision);
            DoRegisterExistingAssets(dialog, ctx, adnResolution);
            // if the operation status of an addin not equals to unaffected (i.e, directly/indirectly affected addin), it need to
            // be resolved, so we add it to the addin resolution list.
            return(existingAddin.OperationStatus == AddinOperationStatus.Unaffected ? null : adnResolution);
        }
コード例 #6
0
        static AddinRecord ToPersistentObject(AddinResolution adnResolution)
        {
            var addinFilePack    = ToAddinFilePack(adnResolution);
            var addinIndexRecord = new AddinIndexRecord(addinFilePack)
            {
                RunningStatus = adnResolution.RunningStatus,
                AddinHeader   = ToPersistentObject(adnResolution.AddinHeader),
            };
            var addinBodyRecord = new AddinBodyRecord(adnResolution.Guid);

            if (adnResolution.ReferencedAssemblySets != null)
            {
                foreach (var referencedAssemblySet in adnResolution.ReferencedAssemblySets)
                {
                    addinIndexRecord.AddReferencedAssembly(new ReferencedAssemblyRecord
                    {
                        Uid     = referencedAssemblySet.Uid,
                        Version = referencedAssemblySet.Version
                    });
                }
            }

            if (adnResolution.ExtendedAddins != null)
            {
                foreach (var extendedAddin in adnResolution.ExtendedAddins)
                {
                    addinIndexRecord.AddExtendedAddin(new ExtendedAddinRecord
                    {
                        Uid     = extendedAddin.AddinId.Uid,
                        Version = extendedAddin.AddinHeader.Version
                    });
                }
            }

            if (adnResolution.ExtendedExtensionPoints != null)
            {
                foreach (var extendedExtensionPoint in adnResolution.ExtendedExtensionPoints)
                {
                    addinIndexRecord.AddExtendedExtensionPoint(extendedExtensionPoint.Uid);
                }
            }

            if (adnResolution.ExtensionPoints != null)
            {
                foreach (var extensionPoint in adnResolution.ExtensionPoints)
                {
                    //if (extensionPoint.Children == null)
                    //    continue;
                    var epRecord = extensionPoint.ToRecord();
                    addinIndexRecord.AddExtensionPoint(ToBaseObject(epRecord));
                    addinBodyRecord.AddExtensionPoint(epRecord);
                }
            }

            if (adnResolution.ExtensionBuilderGroups != null)
            {
                foreach (var extensionBuilderGroup in adnResolution.ExtensionBuilderGroups)
                {
                    addinBodyRecord.AddExtensionBuilderGroup(extensionBuilderGroup.ToRecord());
                }
            }

            if (adnResolution.ExtensionGroups != null)
            {
                foreach (var extensionGroup in adnResolution.ExtensionGroups)
                {
                    addinBodyRecord.AddExtensionGroup(extensionGroup.ToRecord());
                }
            }

            return(new AddinRecord {
                AddinIndex = addinIndexRecord, AddinBody = addinBodyRecord
            });
        }