等效于SimpleInjector的RegisterDecorator方法
本文关键字:RegisterDecorator 方法 SimpleInjector | 更新日期: 2023-09-27 18:11:12
我在简单注入器IoC容器中有以下代码:
container.RegisterDecorator(typeof(ICommandHandler<>),
typeof(ValidationCommandHandlerDecorator<>));
我需要将其转换为Ninject等效。我读到过Ninject中的Decorator模式是通过WhenInjectedInto
方法完成的,但整个隐藏需要3个参数,就像这样:
Bind<IRepository>().To<SimpleRepository>
.WhenInjectedInto<AdvancedRespository>();
这个方法在简单注入器只需要2,所以你能告诉我,请我在这里错过了什么?
我认为SimpleInjector的RegisterDecorator功能没有直接的等号。如果我理解正确,这定义了每当你请求一个ICommandHandler,你会得到一个ValidationCommandHandlerDecorator返回装饰一些默认的ICommandHandler。在Ninject中,你需要像你已经做过的那样做。至少我不知道有任何功能或扩展直接提供这种机制。
参见这个问题如何使用Ninject与装饰器绑定?
在阅读了简单注入器中的装饰器之后,我真的看不出它与普通注入有什么不同。你为什么就不能这么做呢?
kernel.Bind(typeof(ICommandHandler<>))()
.To(typeof(ValidationCommandHandlerDecorator<>))
如果您需要根据对象的类型控制几个类型的注入,那么您将使用.WhenInjectedInto()