SimpleInjector RegisterDecorator方法的Ninject等效项

时间:2013-04-27 15:09:45

标签: c# ninject simple-injector

我在Simple Injector IoC容器中有以下代码:

container.RegisterDecorator(typeof(ICommandHandler<>),
    typeof(ValidationCommandHandlerDecorator<>));

我需要将其转换为Ninject等效项。我已经读过Ninject中的Decorator模式是通过WhenInjectedInto方法完成的,但整个biding需要像3这样的参数:

Bind<IRepository>().To<SimpleRepository>
    .WhenInjectedInto<AdvancedRespository>();

Simple Injector中的这个方法只需要2,所以你能告诉我,我在这里缺少什么吗?

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()