Как передавать контекстные данные в декоратор без изменения командного интерфейса?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как передавать контекстные данные в декоратор без изменения командного интерфейса?

Сообщение Anonymous »

Я работаю над функцией, в которой мне нужно отправлять аналитические данные всякий раз, когда выполняется команда - например, была ли команда запустить через горячую кладку или кнопку пользовательского интерфейса. Тем не менее, я хочу достичь этого без изменения существующего командного интерфейса. Но я не уверен, как передать дополнительный контекст (например, источник триггера) в декоратор, не изменяя подпись метода интерфейса. < /P>
Вот упрощенная версия моего кода: < /p>

Интерфейс, определяющий команду, способную выполнять действие: < /li>
< /ul>
public interface IActionCommand
{
void ExeciteAction(ActionModel actionModel);
}
< /code>

ActionModel может содержать все, что связано с действием (параметры, метаданные и т. Д.) public abstract class ActionCommandDecorator : IActionCommand
{
protected IActionCommand Decorator { get; }

public ActionCommandDecorator(IActionCommand decorator)
{
Decorator = decorator;
}
public abstract void ExeciteAction(ActionModel actionModel);
}
< /code>

Конкретная реализация iaictionCommand. Это фактическая логика для выполнения какого -то действия. < /Li>
< /ul>
public class AnyActiomCommand : IActionCommand
{
public void ExeciteAction(ActionModel actionModel)
{
//Do action
}
}
< /code>

Декоратор, который завершает команду для отслеживания аналитики: < /li>
< /ul>
public class AnyActiomCommandAnalyticsDecorator : ActionCommandDecorator
{
private AnaliticaService _analiticaService = new AnaliticaService();
public AnyActiomCommandAnaliticDecorator(IActionCommand decorator) : base(decorator)
{
}

public override void ExeciteAction(ActionModel actionModel)
{
_analiticaService.SendData(new AnalyticsModel());
Decorator.ExeciteAction(actionModel);
}
}
< /code>

Аналитическая модель может содержать все что -либо < /li>
< /ul>
Проблема: < /strong> < /em>
Я не хочу изменять интерфейс IActionCommand, чтобы включить MetAdata или параметр, такой как Execute (ActionModel Source, анализ. Я хочу, чтобы интерфейс был чист.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... nd-interfa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как передавать контекстные данные в декоратор без изменения командного интерфейса?
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как передавать контекстные данные в декоратор без изменения командного интерфейса?
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Symfony Mailer: сообщение теряло контекстные данные при захвате события MessageSent
    Anonymous » » в форуме Php
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Можно ли поместить контекстные данные в ExchangeFilterFunctions?
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Передавать или не передавать модель представления в составной элемент
    Anonymous » » в форуме Android
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»