1

我正在编写一个程序,允许开发人员为其编写插件,我希望开发人员能够挂钩程序中发生的事件。

我的代码未编译,因为我无法在 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";
        }
    }
4

3 回答 3

3

如果您希望为您的插件实现事件模型,那么您应该使用委托而不是接口 - 查看 MSDN 中的这个简介,看看它是否清除了任何东西:

何时使用委托而不是接口(C# 编程指南)

于 2008-12-28T08:35:30.087 回答
3

问题已解决。

我不知道委托可以在命名空间级别声明而不在类中。

于 2008-12-28T08:37:59.163 回答
1

IMyProgram 正在为代表和事件声明一个公共范围。删除它们,我认为您将能够编译

于 2008-12-28T07:37:31.047 回答