//// 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);
        }
예제 #2
0
 internal override bool Equals(ExtensionBuilderResolution other)
 {
     throw new NotImplementedException();
 }
예제 #3
0
        // 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));
        }
예제 #4
0
 internal override bool Equals(ExtensionBuilderResolution other)
 {
     return(ReferenceEquals(other, _referenced));
 }
예제 #5
0
 internal abstract bool Equals(ExtensionBuilderResolution other);