我正在尋找一種處理一系列對象的好方法,所以如果我使用基礎流的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