我有一个相当简单的控制台应用程序,可以监视exchange邮箱,挑选出特定的电子邮件,并根据内容更新几个数据库。
我想实现几个类似的系统。虽然复制这个系统非常简单,但我正在研究一个更复杂的解决方案--主要是一个智力练习,一个学习练习。
我想构建一个核心应用程序,该应用程序定期从DB中提取模板信息;该信息将告诉应用程序,它必须在特定的时间间隔内监视具有给定特征的电子邮件。
我设想用一些虚拟函数(预处理、处理项、归档项、发送通知等)创建一个主模板(程序集)。反过来,我会创建任意数量的模板来实现主模板中的接口,但是在每种情况下,功能可能会大相径庭,一个可能更新数据库,另一个则可能在文件系统中存储一些东西。
我的第一个问题是这样做是否明智?
我的第二个问题是如何动态引用每个模板,以及如何在适当的时候调用这些模板的方法?
如果我要扩展我的模板项目,为每一个所需的新模板添加一个新的类,我就可以克服动态引用模板的问题。但如果我想把它们分开..。有没有办法把他们扔进这个项目?不要忘记,模板将在DB中列出,所以应用程序会注意到它们,但是如何使用它们.
UPDATE:我已经知道如何动态引用每个模板类;它要求我向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那样复杂,但更简单,更适合我目前的需求。
发布于 2012-01-27 18:02:44
当使用带有字符串的激活器时,请使用Activator.CreateInstance(字符串,字符串)重载。
或者,您可以创建一个类型的实例,并这样使用它:
Activator.CreateInstance(Type.GetType(templateName));发布于 2012-01-27 16:58:31
您可以使用MEF动态加载插件。它是在VS2010中的盒子,并工作在动态加载程序集。
https://stackoverflow.com/questions/9037009
复制相似问题