这里的问题是,您在执行泛型绑定,但您在特定情况下使用它。只有当您希望通用绑定应用于该绑定的所有情况(或至少可以有条件地绑定到的所有情况)时,才希望使用通用绑定。
为此,您可以轻松地执行以下操作:
kernel.Bind<IValidator<OsiRequest>>().To<OsiRequestValidator>();
kernel.Bind<ICommandHandler<OsiRequest>()
.To<SaveOsiRequestCommandHandler>()
.WhenInjectedInto<ValidationCommandHandlerDecorator<OsiRequest>>();
kernel.Bind<ICommandHandler<OsiRequest>()
.To<ValidationCommandHandlerDecorator<OsiRequest>()
.WhenInjectedInto<SaveNewOsiRequestController>();
然后,每个附加值将是:
kernel.Bind<IValidator<DifferentRequest>>().To<DifferentValidator>();
kernel.Bind<ICommandHandler<DifferentRequest>()
.To<DifferentRequestCommandHandler>()
.WhenInjectedInto<ValidationCommandHandlerDecorator<DifferentRequest>>();
kernel.Bind<ICommandHandler<DifferentRequest>()
.To<ValidationCommandHandlerDecorator<DifferentRequest>()
.WhenInjectedInto<DifferentRequestController>();
您可以更改最后一个绑定,这样就不必为每个类型声明它:
kernel.Bind(typeof (ICommandHandler<>))
.To(typeof (ValidationCommandHandlerDecorator<>))
.WhenInjectedInto<ApiController>();