forked from sunminghong/MEditor
/
ProcesserFactory.cs
59 lines (54 loc) · 1.85 KB
/
ProcesserFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace MEditor.Processers
{
/// <summary>
/// 配置标签处理工厂,即给工厂添加处理器
/// </summary>
public class ProcesserFactory
{
private static SortedList<EMark,IProcesser> _procs=new SortedList<EMark,IProcesser>();
static ProcesserFactory()
{
initProcesser();
}
/// <summary>
/// 取得配置后的处理工厂对象
/// </summary>
/// <param name="serviceType">指定为哪类服务器类型配置消息处理工厂</param>
/// <returns></returns>
public static void Processe(System.Windows.Forms.RichTextBox rtb, EMark mark)
{
if (_procs.ContainsKey(mark))
{
_procs[mark].Process(rtb, mark);
}
}
/// <summary>
/// 在此集中给工厂添加处理器
/// </summary>
/// <param name="factory"></param>
private static void initProcesser()
{
Assembly assembly = Assembly.GetAssembly(typeof(ProcesserFactory));
//得到Assembly中的所有类型
Type[] types = assembly.GetTypes();
//遍历所有的类型,找到插件类型,并创建插件实例并加载
foreach (Type type in types)
{
//判断类型是否派生自IPlugin接口
if (type.GetInterface("IProcesser") != null)
{
//创建插件实例
IProcesser processer = (IProcesser)Activator.CreateInstance(type);
foreach (EMark m in processer.ProcessMarks)
{
_procs.Add(m, processer);
}
}
}
}
}
}