前面的文章AgileEAS.NET之插件接口IModule对插件的基本契约宝义也就是接口做了一个介绍,本文将提供另一种模块插件的定义,采用属性标记插件。
我们定义了ModuleAttribute属性:
ModuleAttribute /// <summary> /// EAS.NET模块插件属性。 /// </summary> /// <remarks> /// 提供IModule的标记实现,提供基于属性标记的插件实现。 /// </remarks> [AttributeUsage(AttributeTargets.Class)] public class ModuleAttribute : Attribute { private Guid guid = System.Guid.Empty; private string name = string.Empty; private string description = string.Empty; /// <summary> /// 初始化ModuleAttribute对象。 /// </summary> /// <param name="guid">模块Guid。</param> /// <param name="name">模块名称。</param> public ModuleAttribute(string guid, string name) { this.guid = new Guid(guid); this.name = name; } /// <summary> /// 初始化ModuleAttribute对象。 /// </summary> /// <param name="guid">模块Guid。</param> /// <param name="name">模块名称。</param> /// <param name="description">模块说明。</param> public ModuleAttribute(string guid, string name,string description) { this.guid = new Guid(guid); this.name = name; this.description = description; } /// <summary> /// 模块Guid。 /// </summary> public string Guid { get { return this.guid.ToString(); } set { this.guid = new Guid(value); } } /// <summary> /// 模块名称。 /// </summary> public string Name { get { return this.name; } set { this.name = value; } } /// <summary> /// 模块说明。 /// </summary> public string Description { get { return this.description; } set { this.description = value; } }
及ModuleRunAttribute属性
ModuleRunAttribute /// <summary> /// 模块入口方法属性。 /// </summary> /// <remarks> /// 配合ModuleAttribute实现基于标记的IMoule模块。 /// </remarks> [AttributeUsage(AttributeTargets.Method)] public class ModuleRunAttribute : Attribute { /// <summary> /// 初始化ModuleRunAttribute对象。 /// </summary> public ModuleRunAttribute() { } }
我们只需要在我们要公共的模块插件的类打上ModuleAttributes标记、在模块的入口调用方法上打上ModuleRunAttribute就可以了,以下为示例:
Hello /// <summary> /// 基于标记实现的插件。 /// </summary> [Module("CB58C5BB-5D15-4a17-802E-341F9F65F35C", "Hello例子", "基于标记的模块实现例子")] public class Hello { /// <summary> /// 入口方法。 /// </summary> [ModuleRun] public void Start() { MessageBox.Show("Hello..."); } public void Start2() { MessageBox.Show("Hello2..."); } }
在以上例子中,我们标记了一个模块插件,他的GUID属性为“CB58C5BB-5D15-4a17-802E-341F9F65F35C”,模块名称为Hello例子,入口方法为Start方法,特别声明一下,Start必须为一公共为参该当,Web模块不需要入口方法。