我有一个相当简单的控制台应用程序,它监控一个交换邮箱,挑选特定的电子邮件,并根据内容更新几个数据库。
我想实现几个类似的系统。虽然复制这个系统非常简单,但我正在寻找一个更复杂的解决方案 - 主要是智力练习,学习练习。
我想构建一个核心应用程序,定期从数据库中提取模板信息;此信息将告诉应用程序必须在特定时间间隔监视给定邮箱中具有给定特征的电子邮件。
我设想创建一个具有一些虚拟功能(预处理、处理项目、归档项目、发送通知等)的主模板(程序集)。反过来,我会创建任意数量的模板来实现主模板中的接口,但是在每种情况下功能可能会有很大的不同,一个可能会更新数据库,而另一个可能会在文件系统中存储一些东西。
我的第一个问题是这是否是一个明智的实现?
我的第二个问题是如何动态引用每个模板,在适当的时候如何调用这些模板的方法?
如果我要扩展我的模板项目,为每个所需的新模板添加一个新类,我将克服动态引用模板的问题。但是,如果我想将它们保存在单独的程序集中.. 有没有办法将它们放入项目中?不要忘记,模板将列在数据库中,因此应用程序会知道它们,但是如何使用它们......
更新:我想出了如何动态引用每个模板类;它要求我向 GetType 提供程序集限定名称:我尝试在主应用程序中动态生成模板:
string aqn= "MasterTemplates.TestTemplate, TestTemplate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
MasterTemplate mt = (MasterTemplate)Activator.CreateInstance(Type.GetType(aqn));
因此,如果我不断更新我的 MasterTemplates 项目,根据需要添加新类,我可以实现我的目标。但是,如何处理不同的模板程序集?
同时,我很快将看一下 DBM 对托管可扩展性框架的建议。
结论: 我没有时间全面调查MEF;虽然它对我目前的需求来说有点过头了,但它看起来非常有希望。而且我还没有想出如何为不同的模板轻松开发和使用不同的程序集——相反,我将所有模板保存在一个程序集中,每次需要新模板时我都必须重新编译和更新它。不像 MEF 替代品那样复杂,但更简单,适合我当前的需求。