2011-12-14 15 views
1

我的問題是有點含糊...如何在構造函數/參數注入之間進行選擇?

比方說,我有這個過程,發送郵件到一個店鋪時,有一個新的秩序

class BookingMessager : IBookingMessager{ 
    BookingMessager(IBookingDataSource source,IBookingMessageFactory messageFactory,IMessager messager){ 
    this.source = source; 
    this.messageFactory= messageFactory; 
    this.messager = messager; 
    } 
    void SendBookingMessage(int idBooking){ 
    Booking aBooking = source.GetById(idBooking); 
    BookingMessage aMessage = messageFactory.Create(aBooking); 
    messager.SendMessage(aBooking.Shop.Contact,aMessage.Title,aMessage.Content); 
    } 
} 

這是運作良好。

新要求:我必須根據商店更改我的消息正文。

我雖然瞭解這些解決方案:我創建了一個IBookingMessageFactory那將取決於所需的IBookingMessageFactory上像

BookingMessage Create(Booking aBooking){ 
return this.BookingMessageFactoryIndex.ContainsKey(aBooking.Shop.ID) ? this.BookingMessageFactoryIndex[aBooking.Shop.ID].Create(aBooking) : this.default.Create(aBooking); 
} 

店或者我注入IBookingMessageFactory作爲參數,但會逼我打電話更新我的界面IBookingMessager :(

什麼是最好的解決辦法嗎?難道我的第一個代碼行嗎?我如何構造和參數注入之間進行選擇?

+0

@ JesseC.Slicer你不能這樣做,請! – 2011-12-15 08:54:35

回答

1

又讓IBookingMessageFactory [R改編一個特定的店鋪BookingMessage看起來不錯。看起來你正在使用複合/裝飾器IBookingMessageFactory,它將委託給一個特定於商店的實現,這非常棒,因爲這使得事情變得簡單。

+0

是的,但有了這個解決方案,我最終會得到一些拉薩那代碼不行嗎? – 2011-12-15 08:56:56

相關問題