Nécessité de remplacer la méthode qui se trouve dans un espace de noms avec une autre classe qui la construit

StackOverflow https://stackoverflow.com/questions/664229

Question

J'essaie de remplacer une méthode sur un contrôle du kit de développement de Community Server SDK appelé "InlineTagsContainerTagEditor".

Lorsque je trouve la source de ce contrôle, il se trouve à l'intérieur d'un fichier avec une autre classe appelée "TaggableContentTagEditableList".

Voici ce que je pense des parties pertinentes:

namespace CommunityServer.Controls
{
    public class TaggableContentTagEditableList : WrappedContentBase, ICallbackEventHandler
    {
       protected virtual InlineTagsContainerTagEditor GetInlineTagEditor(ITagsContainer container)
        {
            return new InlineTagsContainerTagEditor(container);
        }

    }
    public class InlineTagsContainerTagEditor : TWC.InlineEditor
    {
        ITagsContainer _container;

        public InlineTagsContainerTagEditor(ITagsContainer container)
            : base()
        {
            _container = container;
        }

    }
}

J'essaie simplement de créer une version de TaggableContentEditableList qui supprime certaines "balises". La méthode pour cela que j'ai essayé de remplacer ci-dessous - mais je suis très perdue. Dois-je remplacer le constructeur de TaggableContentTagEditableList afin que celui-ci recherche le type correct avec ma méthode overriden?

public partial class TaggableContentEditableListExclude : TaggableContentTagEditableList
{
    protected override InlineTagsContainerTagEditor GetInlineTagEditor(ITagsContainer container)
    {
        return new TagExcludeOption(container);
    }
}

public partial class TagExcludeOption : InlineTagsContainerTagEditor
{
    ITagsContainer _container;

    public TagExcludeOption(ITagsContainer container) : base(container)
     {
        _container = container;
    }

    public override string FormatTags(string[] tagList)
    {
        // strip special tags
        string[] newTagList = stripTags(tagList);
        return base.FormatTags(newTagList);
    }

    private string[] stripTags(string[] tagList)
    {
        //doing something here
    }
}
Était-ce utile?

La solution

Votre problème semble être lié à votre substitut FormatTags

Vous créez une nouvelle chaîne avec vos balises supprimées, puis vous envoyez l'ancienne chaîne dans la base.

L'ancienne chaîne n'a pas été modifiée pour que votre remplacement ne fasse rien.

Essayez

public override string FormatTags(string[] tagList)
{
    // strip special tags
    string[] newTagList = stripTags(tagList);
    return base.FormatTags(newTagList);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top