我有一个返回对象列表的方法。
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'的定义。它就在那里。我可以在手表中看到它。但是..如何访问此属性?
答案 0 :(得分:1)
以下是一些选项:
List<object>
。创建一个包装类,以根据需要从Microsoft.ServiceBus.Messaging.BrokeredMessage
传递属性。更多的工作,但编译时安全。dynamic
代替object
。危险在于您将所有绑定推迟到运行时,因此如果某个对象没有ContentType
属性,则在运行时之前您不会知道它。减少工作量(懒惰),更难以调试运行时错误。