5

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

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

我需要把它翻译成 Ninject 等价物。我读过 Ninject 中的装饰器模式是通过该WhenInjectedInto方法完成的,但整个投标需要像这里这样的 3 个参数:

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

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

4

2 回答 2

2

我认为没有直接等效于 SimpleInjector 的 RegisterDecorator 功能。如果我理解正确,这定义了每当您请求 ICommandHandler 时,您都会得到一个返回的 ValidationCommandHandlerDecorator 来装饰一些默认的 ICommandHandler。在 Ninject 中,您需要像以前那样执行此操作。至少我不知道直接提供该机制的任何功能或扩展。

另请参阅此问题 How the binding are done with decorators using Ninject?

于 2013-04-27T19:41:20.010 回答
1

在阅读了 Simple Injector 中的装饰器之后,我真的看不出它与普通注入有什么不同。为什么你不能这样做?

kernel.Bind(typeof(ICommandHandler<>))()
      .To(typeof(ValidationCommandHandlerDecorator<>))

如果您需要根据对象的类型控制几种类型的注入,那么您将使用.WhenInjectedInto()

于 2013-04-28T16:08:05.800 回答