//// the extension point/builder type //internal TypeResolution Type { get; set; } #endregion internal void AddChild(ExtensionBuilderResolution item) { _children = _children ?? new List <ExtensionBuilderResolution>(); item.Parent = this; _children.Add(item); }
internal override bool Equals(ExtensionBuilderResolution other) { throw new NotImplementedException(); }
// if we can find the referenced extension builder, the resolution is done. internal override ResolutionStatus Resolve(IMessageDialog dialog, ConvertionManager convertionManager, ResolutionContext ctx) { // Tries to get the parent if (Parent == null) { BaseExtensionPointResolution objParent; if (ParentIsExtensionPoint) { ExtensionPointResolution parent; if (!ctx.TryGetExtensionPoint(dialog, ParentPath, out parent)) { dialog.AddError(string.Format("Can not find the parent of the specified extension builder [{0}] with path [{1}]!", TypeName, ParentPath)); return(ResolutionStatus.Failed); } objParent = parent; } else { ExtensionBuilderResolution parent; if (!ctx.TryGetExtensionBuilder(dialog, ParentPath, out parent)) { dialog.AddError(string.Format("Can not find the parent of the specified extension builder [{0}] with path [{1}]!", TypeName, ParentPath)); return(ResolutionStatus.Failed); } objParent = parent; } if (objParent.DeclaringAddin != null && !ReferenceEquals(objParent.DeclaringAddin, DeclaringAddin)) { if (objParent.Type == null) { return(ResolutionStatus.Pending); } // The parent of current extension builder is not defined in the same addin as it is, // so we needs to add its declaring addin as a reference (the type of the parent must // be loaded before this extension builder at start up). AssemblyResolutionSet assemblySet; if (!ctx.TryGetAssemblySet(objParent.Type.Assembly.AssemblyKey, out assemblySet)) { throw new Exception(); } DeclaringAddin.AddReferencedAssemblySet(assemblySet); } Parent = objParent; } if (_referenced == null) { var referenced = TryFindReferencedExtensionBuilder(Parent, Id); if (referenced == null) { if (!ctx.TryGetExtensionBuilder(dialog, Path, out referenced)) { return(ResolutionStatus.Failed); } } if (referenced.DeclaringAddin != null && !ReferenceEquals(referenced.DeclaringAddin, DeclaringAddin)) { if (referenced.Type == null) { return(ResolutionStatus.Pending); } // The parent of current extension builder is not defined in the same addin as it is, // so we needs to add its declaring addin as a reference (the type of the parent must // be loaded before this extension builder at start up). AssemblyResolutionSet assemblySet; if (!ctx.TryGetAssemblySet(referenced.Type.Assembly.AssemblyKey, out assemblySet)) { throw new Exception(); } DeclaringAddin.AddReferencedAssemblySet(assemblySet); } _referenced = referenced; } return(ResolveAddin(Parent) | _referenced.Resolve(dialog, convertionManager, ctx)); }
internal override bool Equals(ExtensionBuilderResolution other) { return(ReferenceEquals(other, _referenced)); }
internal abstract bool Equals(ExtensionBuilderResolution other);