internal Addin(Dictionary <Guid, Addin> guid2Addins, RuntimeSystem runtimeSystem, AddinIndexRecord addinIndex) { var addinFileSystem = new AddinFileSystem(guid2Addins, addinIndex); _adnContext = new AddinContext(runtimeSystem, addinFileSystem); }
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); }
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); }
// 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; }
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); }
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 }); }