È necessario sostituire il metodo che si trova in uno spazio dei nomi con un'altra classe che lo costruisce

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

Domanda

Sto cercando di ignorare un metodo su un controllo nell'SDK di Community Server chiamato "InlineTagsContainerTagEditor".

Quando trovo l'origine di questo controllo, si trova all'interno di un file con un'altra classe chiamata 'TaggableContentTagEditableList'.

Ecco cosa penso siano le parti rilevanti:

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;
        }

    }
}

Sto solo cercando di creare una versione di TaggableContentEditableList che rimuove alcuni 'tag'. Di seguito ho tentato di scavalcare il metodo, ma mi perdo molto. Devo sovrascrivere il costruttore per TaggableContentTagEditableList per fare in modo che il costruttore cerchi il tipo corretto con il mio metodo 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
    }
}
È stato utile?

Soluzione

Il tuo problema sembra essere nel tuo override FormatTags

Stai creando una nuova stringa con i tuoi tag rimossi ma poi invii la vecchia stringa nella base.

La vecchia stringa non è stata modificata, quindi la tua sostituzione non sta facendo nulla.

Prova

public override string FormatTags(string[] tagList)
{
    // strip special tags
    string[] newTagList = stripTags(tagList);
    return base.FormatTags(newTagList);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top