我在Simple Injector IoC容器中有以下代码:
container.RegisterDecorator(typeof(ICommandHandler<>),
typeof(ValidationCommandHandlerDecorator<>));
我需要将其转换为Ninject等效项。我已经读过Ninject中的Decorator模式是通过WhenInjectedInto
方法完成的,但整个biding需要像3这样的参数:
Bind<IRepository>().To<SimpleRepository>
.WhenInjectedInto<AdvancedRespository>();
Simple Injector中的这个方法只需要2,所以你能告诉我,我在这里缺少什么吗?
答案 0 :(得分:2)
我认为没有直接等同于SimpleInjector的RegisterDecorator功能。如果我理解正确,则定义每当您请求ICommandHandler时,您将获得返回的ValidationCommandHandlerDecorator,它会修饰一些默认的ICommandHandler。 在Ninject中你需要像你已经做的那样做。至少我不知道任何直接提供该机制的功能或扩展。
另见这个问题 How the binding are done with decorators using Ninject?
答案 1 :(得分:1)
在阅读Simple Injector中的装饰器之后,我真的没有看到它与正常注射有什么不同。为什么你不能这样做?
kernel.Bind(typeof(ICommandHandler<>))()
.To(typeof(ValidationCommandHandlerDecorator<>))
如果你需要根据对象的类型控制注入几种类型,那么你可以使用.WhenInjectedInto()