【问题标题】:How do I handle outlooks VSTO objects as if they are mailitems如何处理 Outlook VSTO 对象,就好像它们是邮件项一样
【发布时间】:2010-11-15 15:30:16
【问题描述】:

我编写了一些 VSTO (2003) 代码,这些代码成功地根据邮件的附件应用了一些强制性的主题行更改。编写代码是为了在 microsoft.office.interop.outlook.mailitem 上运行但是,我需要相同的代码来在其他类型上运行,例如 microsoft.office.interop.outlook.appointmentitem (事实上它需要适用于任何用户可以发送有主题的)。

假设 Outlook 项目类型具有主题属性、附件属性和保存方法,我该如何编写适用于所有相关 interop.outlook 类型的代码。

我尝试通过反射解决此问题,但 GetProperty 正在返回 null,因此我无法在其上使用 GetValue

? mi.GetType().GetProperty("主题") 空值 ?(mi as Microsoft.Office.Interop.Outlook.MailItem).Subject “考试科目”

似乎没有一个通用的outlookitem 类我可以转换为来执行此操作。什么是正确的方法?

编辑: 为了澄清我的代码是这样开始的......

void Application_ItemSend(object Item, ref bool Cancel) { 如果(项目是 Microsoft.Office.Interop.Outlook.MailItem) { Microsoft.Office.Interop.Outlook.MailItem currentItem = 项目为 Microsoft.Office.Interop.Outlook.MailItem;

然后对 currentItem 进行处理(包括传递给当前使用 Microosft.Office.Interop.Outlook.MailItem 属性键入的各种函数。我希望它们处理“Microsoft.Interop.Outlook.somethingsendable”

【问题讨论】:

  • mi 声明为什么类型?
  • 在我的原始代码中,它声明为邮件项,但是,我希望能够处理其他类型...我将编辑我的问题以澄清

标签: c# reflection vsto polymorphism


【解决方案1】:

这不是开箱即用的 - AppointmentItemMailItem 是完全不同的接口,因此不能选择多态性。

我能建议的最好的方法是您自己创建一个SendableItem 类来包装您需要支持的 PIA 接口,并将切换代码封装在您要使用的“常见”操作的通用包装器后面.您可以使用MailItemAppointmentItem 创建一个SendableItem,但是一旦创建,它们从SendableItem 包装器的外部看起来是一样的。

【讨论】:

  • 谢谢史蒂夫。我认为这会奏效,而且它不会太讨厌......不像我开始尝试的反射解决方案那么讨厌!可惜没有部分多态性!
  • 是的 - 这些 PIA 确实是让事情正常工作所需的基本框架,不如 .Net 框架的其余部分那么优雅。祝你好运。
猜你喜欢
  • 2020-01-10
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多