我正在使用SimpleInjector 2.2.3.0。裝飾師裝飾基地命令
我有一個MVC 4.0項目,並在我的命令周圍使用裝飾模式來管理我的UnitOfWork和我的授權。 我有授權的裝飾工 - IAuthorisationDecorator
。這包裝了我所有的ITransactionalCommandHandlers
。 (每個ITransactionalCommandHandler
也被IUnitOfWorkDecorator
飾)授權的裝飾看起來是這樣的:
public void Handle(TCommand command)
{
//authorise this command for this Iprincipal
decoratedCommandHandler.Handle(command);
}
我現在想創建一個INonTransactionalCommandHandler
(這並不需要一個NHibernate的會議,它只是做一些文件IO)。 注意兩個INonTransactionalCommandHandler
和ICommandHandler
ITransactionalCommandHandler
繼承 - 它看起來像這樣:
public interface ICommandHandler<in TCommand, out TResult>
{
TResult Result { get; }
void Handle(TCommand command);
}
我真的不希望有創建兩個相同AuthorisationDecorators
(交易/事務不)。因爲最終他們裝飾了一個基地ICommandHandler
(其實施爲ITransactional
或INonTransactional
)。
所以我的問題是 - 有什麼辦法可以創建1個裝飾是裝飾基地ICommandHandler
- 但容器知道到ICommandHandler
投高達ITransactionalCommandHandler
或INonTransactionalCommandHandler
。有沒有辦法做到這一點?
最後一刻落敗後再次! – qujck
謝謝,這很好。我選擇了第一個選項,所以我的一些命令處理程序實現了ITransactionalCommandHandler - 但是現在授權可以是通用的,因爲裝飾器只處理ICommandHandlers。我將事務實現的泄漏點寫入CommandHandler中,但我認爲其他選項會遇到同樣的問題。 – jonho