2011-12-14 60 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

相关问题