前面的文章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模块不需要入口方法。