C# пользовательские обработчики событий

Благодаря этому плану развертывания я могу использовать activemq в кластере Kubernetes, работающем в AWS. Тем не менее, я все еще пытаюсь выяснить, почему это не работает для MySQL таким же образом.

Просто запустить

    kubectl create -f activemq.yaml 

делает свое дело. Очереди являются постоянными и даже завершают работу модуля, а перезапуск вызывает очереди. Они остаются до тех пор, пока не будут удалены постоянный том и утверждение. С этим шаблоном мне даже не нужно явно создавать том.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: activemq-deployment
      labels:
        app: activemq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: activemq
      template:
        metadata:
          labels:
            app: activemq
        spec:
          securityContext:
            fsGroup: 2000
          containers:
          - name: activemq
            image: activemq:1.0
            ports:
            - containerPort: 8161
            volumeMounts:
            - name: activemq-data
              mountPath: /opt/apache-activemq-5.15.6/data
              readOnly: false
          volumes:
          - name: activemq-data
            persistentVolumeClaim:
              claimName: amq-pv-claim
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: amq-nodeport-service
    spec:
      selector:
        app: activemq
      ports:
      - port: 8161
        targetPort: 8161
      type: NodePort
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: amq-pv-claim
    spec:
      #storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi
7
задан TK. 20 October 2008 в 12:52
поделиться

5 ответов

Необходимо проверить Систему. ComponentModel. BindingList, конкретно событие ListChanged.

10
ответ дан 6 December 2019 в 05:44
поделиться

BindingList вероятен Ваш наилучший вариант, поскольку он имеет встроенное отслеживание изменений и множество существующих событий, которые можно использовать. Ниже пример представления пользовательского события для, Добавляют который вперед к событию BindingList.


    class Example
    {
        private BindingList<string> m_names = new BindingList<string>();
        public IEnumerable<string> Names { get { return m_names; } }
        public event AddingNewEventHandler NamesAdded
        {
            add { m_names.AddingNew += value; }
            remove { m_names.AddingNew -= value; }
        }
        public void Add(string name)
        {
            m_names.Add(name);
        }
    }
13
ответ дан 6 December 2019 в 05:44
поделиться

Одной альтернативой BindingList является ObservableCollection - в этом случае Вы хотели бы подписать свой собственный обработчик событий на событие CollectionChanged и запустить Ваше событие в зависимости от действия.

10
ответ дан 6 December 2019 в 05:44
поделиться

David Mohundro показывает один подход; еще одна опция состоит в том, чтобы наследоваться Набору <T> и переопределить различные методы:

class Foo {}
class FooCollection : Collection<Foo>
{
    protected override void InsertItem(int index, Foo item)
    {
        // your code...
        base.InsertItem(index, item);
    }
    protected override void SetItem(int index, Foo item)
    {
        // your code...
        base.SetItem(index, item);
    }
    // etc
}

Наконец, Вы могли создать свой собственный список (IList, IList <T>) от первых принципов - большая работа, мало преимущества.

0
ответ дан 6 December 2019 в 05:44
поделиться

Неправославный подход мог бы использовать платформу AOP, такую как PostSharp, чтобы "соткать" обработчик прежде чем/после того, как средство доступа называют, который запускает событие.

Вы создаете внешний класс, который содержит пред и/или сообщение, обрабатывающее код для того, когда к Вашему свойству получают доступ, проверьте, генерирует ли значение свойства, измененного между пред и сообщение, и, событие.

Примите во внимание, что при принятии значение для сравнения (в коде обработчика), Вы могли бы войти в бесконечный цикл (Вы называете средство доступа свойства, которое называет обработчик AOP, который называет средство доступа и так далее), таким образом, Вы, возможно, должны были бы отразиться в класс, содержащий это свойство для достижения отступающего поля.

0
ответ дан 6 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: