私はCastel Windsor登録でCommandとCommandHandlerを使用しています。いくつかの例があります:Castle Windsor複合汎用登録
//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インターフェースも実装しています。では、どうすれば汎用コマンドハンドラを正しく登録できますか?
更新:城SoftRemoveCommandHandler<SoftRemoveCommand<T>>
なくSoftRemoveCommandHandler<T>
を解決しようとしていると、それは "プロキシないクーロン" 例外をスロー
//registrations
Types.FromAssembly(Assembly.GetAssembly(typeof(DeleteEntityCommandHandler)))
.BasedOn(typeof(ICommandHandler<>))
.WithService.AllInterfaces()
.WithService.Base()
.LifestyleTransient()
:
WithService.Baseを追加した後。
城を解決することは可能ですかSoftRemoveCommandHandler<T>
ではなく、SoftRemoveCommandHandler<SoftRemoveCommand<T>>
ですか?
問題を示すコンパイルコードを投稿してください。たぶん要点? – Marwijn