获取通用对象的自定义属性

时间:2016-01-07 21:05:43

标签: c# object properties

我有一个返回对象列表的方法。

List<object> messageList = queueQuery.GetMessageCollection();

foreach (object message in messageList)
{
    string contentType = message.ContentType
}

这并不重要,但这些对象的类型恰好是(现在无论如何)Microsoft.ServiceBus.Messaging.BrokeredMessage。但是,在我工作的类中,我不希望它依赖于Microsoft.ServiceBus。关注点分离。

包含queueQuery.GetMessageCollection()的类依赖于Microsoft.ServiceBus,但是如果我们想要使用另一个消息队列系统,我想要它以便处理消息的工作者类不知道什么类型的消息是。

话虽这么说,我需要访问这些对象的一些属性。此屏幕截图来自将处理消息的工作者类。我需要获取ContentType。但是,当然,当我尝试这个时:

string contentType = message.ContentType

我得到:'object'不包含'ContentType'的定义。它就在那里。我可以在手表中看到它。但是..如何访问此属性?

enter image description here

1 个答案:

答案 0 :(得分:1)

以下是一些选项:

  1. 创建一个接口,其中包含您希望传入任何对象的属性。返回该接口类型的列表,而不是List<object>。创建一个包装类,以根据需要从Microsoft.ServiceBus.Messaging.BrokeredMessage传递属性。更多的工作,但编译时安全。
  2. 使用dynamic代替object。危险在于您将所有绑定推迟到运行时,因此如果某个对象没有ContentType属性,则在运行时之前您不会知道它。减少工作量(懒惰),更难以调试运行时错误。
  3. 使用反射。与动态和更多代码相同的危险,但具有更强的能力来检测不具备您期望的属性并优雅地处理它们的对象。