我正在寻找一种处理一系列对象的好方法,所以如果我使用基础流的using语句来创建附件,那么问题出现在GetMessage中...方法1当我去发送邮件消息的附件流被处置,并会收到一个错误。如果我脱掉使用的语句,它可以找到,但我没有妥善处理DataStream Dest。我最初的做法是将一个参数List添加到方法一中,我可以在每次调用GetMessage时在方法1中添加Dest,并在方法结束时通过列表处理流。 SendMessage可以在批处理循环中调用,因此可能会创建很多流,我希望将它留给调用者(SendMessage)来处理它们而不是在GetMessage中,因为SendMessage是发送的地方,我需要确保消息在处置之前已发送。有什么建议么???从调用者处理被调用方法中的流
void sendMessage(MessageType type){
MailMessage m = Method2();
switch(type)
{
case type1:
m = Object1().GetMessage(param1)
case type2:
m = Object2().GetMessage(param1, param2)
case type3:
m = Object3().GetMessage(param1)
case type4:
m = Object4().GetMessage(param1, param2, param3)
case NewType5:
m = NewType5().GetMessage(param1, param2)
}
// this method does the send cause it has the mailmessage
m.Send();
}
class NewType5()
{
MailMessage GetMessage(){
// used to be
// using (var Dest = new DataStream(true)){ .... }
DataStream Dest = new DataStream(true);
// code that reads info into the stream
// Go back to the start of the stream
Dest.Position = 0;
// Create attachment from the stream
Attachment mailattachement = new Attachment(Dest, contentType);
//Create our return value
var message = new MailMessage();
message.To.Add(UserInfo.UserDetail.Email);
message.Subject = "P&L Data View - " + DateTime.Now.ToString();
message.Attachments.Add(mailattachement);
return message;
}
}
要将发送到GetMessage我将不得不改变所有其他对象的所有其他对象实现。我宁愿让发送消息照顾新类型的处理5,因为从批处理过程中可以称为500次。这是否使这个例子更清楚一点。发送消息已经被写入一个实现对象是一个GetMessage实现的其他几个对象。我恰好使用了一个流,并且在发送之前我不能处理流。
只有两种方法可以做到这一点:或者在Method2中进行处理,或者在Method1中创建/处理流并将其作为参数注入到Method2中根据您的评论和当前给出的答案我只能得出结论(1)你没有提供你的问题中的所有信息,(2)你的设计有缺陷。 – jeroenh 2012-08-09 14:25:40
我只是简单地添加一个新类型,其中的大部分代码已经由其他人编写。但是我的新类型需要通过流获得的附件...所以我需要改变调用者SendMessage来处理从新类型的GetMessage处理流,但只有在我知道发送发生之后。我无法在所有其他对象类型上重写其他GetMessage实现。我无法将该流用作GetMessage中的参数,因为在get message消息调用之后再次将dispose放置,并且在switch语句之外完成发送。 – DRobertE 2012-08-09 14:55:54