Разработка .NET AddIn - PullRequest
       6

Разработка .NET AddIn

1 голос
/ 28 декабря 2008

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

Мой код не компилируется, потому что я не могу объявить делегата в интерфейсе IMyProgram.

Итак, я полагаю, это больше вопрос дизайна. Как бы вы могли получить интерфейс, передаваемый в AddIn, чтобы AddIn мог подключаться к событиям программы?

[AddInContract]
    public interface IMyProgramAddInContract : IContract {

        /// <summary>
        /// Initializes AddIn
        /// </summary>
        void Init(IMyProgram instance);

        System.Drawing.Image AddInIcon { get; }

        String DisplayName { get; }

        String Description { get; }
    }

    [AddInContract]
    public interface IMyProgram : IContract {

        public delegate EventHandler EmailEventHandler(object sender, EmailEventArgs args);

        public event EmailEventHandler BeforeCheck;
        public event EmailEventHandler AfterCheck;
        public event EmailEventHandler EmailDownloaded;
        public event EmailEventHandler OnProcessMessage;

    }

    [AddInBase]
    public class EmailEventArgs : EventArgs {

        public override string ToString() {
            return "todo";
        }
    }

Ответы [ 3 ]

3 голосов
/ 28 декабря 2008

Если вы хотите реализовать модель событий для своих надстроек, то вам следует использовать делегаты вместо интерфейсов - посмотрите это объявление от MSDN, чтобы узнать, очищает ли оно что-нибудь:

Когда использовать делегаты вместо интерфейсов (Руководство по программированию в C #)

3 голосов
/ 28 декабря 2008

Проблема была решена.

Я понятия не имел, что делегаты могут быть объявлены на уровне пространства имен, не будучи в классе.

1 голос
/ 28 декабря 2008

IMyProgram объявляет область видимости для делегата и событий. Удалите их, и я думаю, что вы сможете скомпилировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...