我使用命令和命令處理程序與卡斯泰爾溫莎註冊。有一些例子:城堡溫莎複雜通用註冊
//command
public class DeleteEntityComand : ICommand
{
public int Id { get; set; }
}
//command handler
public class DeleteEntityCommandHandler : ICommandHandler<DeleteEnityComand>
{
...
}
//registrations
Types.FromAssembly(Assembly.GetAssembly(typeof(DeleteEntityCommandHandler)))
.BasedOn(typeof(ICommandHandler<>))
.WithService.AllInterfaces().LifestyleTransient()
它的工作原理非常完美。但現在我想用通用的命令處理程序是這樣的:
//command
public class SoftRemoveCommand<T> : ICommand
{
public int Id { get; set; }
}
//command handler
public class SoftRemoveCommandHandler<T> : ICommandHandler<SoftRemoveCommand<T>>
{
..
}
但不幸的是在這種情況下,以前的註冊不起作用。它試圖解決我的抽象BaseCommandHandler,它也實現了ICommandHandler接口。那麼如何正確地註冊我的通用命令處理程序呢?
更新:
//registrations
Types.FromAssembly(Assembly.GetAssembly(typeof(DeleteEntityCommandHandler)))
.BasedOn(typeof(ICommandHandler<>))
.WithService.AllInterfaces()
.WithService.Base()
.LifestyleTransient()
城堡試圖解決SoftRemoveCommandHandler<SoftRemoveCommand<T>>
但不SoftRemoveCommandHandler<T>
,它拋出一個異常 「庫侖沒有代理」:
加入WithService.Base後。
是否有可能讓Castle解決SoftRemoveCommandHandler<T>
而不是SoftRemoveCommandHandler<SoftRemoveCommand<T>>
?
您是否可以發佈顯示問題的編譯代碼片段?也許是要點? – Marwijn