gpt4 book ai didi

ninject - 如何在 Ninject 中装饰实现特定接口(interface)的所有绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 21:14:21 25 4
gpt4 key购买 nike

我正在使用 Jimmy Bogard 的 Mediatr 并尝试使用管道示例 here

我的问题是,尽管我可以像这样获得所有关闭的泛型类型

     kernel.Bind(
x =>
x.FromAssemblyContaining<ExpensiveRequest>()
.SelectAllClasses()
.InheritedFrom(typeof (IRequestHandler<,>)).BindAllInterfaces()

我不能用 MediatorPipeline 来装饰它们。

所以如果我使用 StructureMap 我可以使用这样的东西
cfg.For(typeof(IRequestHandler<,>)).DecorateAllWith(typeof(MediatorPipeline<,>));

我找不到如何使用 Ninject 实现它,因此当我的 Mediator 被调用时,它使用 Mediator 管道,然后下到原始 Handler

最佳答案

有几种方法可以做到这一点。您可以执行您已经在执行的基于约定的扫描,并在其末尾添加上下文绑定(bind):

kernel.Bind(x => x.FromAssemblyContaining<ExpensiveRequest>()
.SelectAllClasses()
.InheritedFrom(typeof(IRequestHandler<,>))
.BindAllInterfaces();
.Configure(c => c.WhenInjectedExactlyInto(typeof(MediatorPipeline<,>));

然后在没有 WhenInjectedExactlyInto 的情况下再次执行完全相同的操作上下文过滤器:
kernel.Bind(x => x.FromAssemblyContaining<ExpensiveRequest>()
.SelectAllClasses()
.InheritedFrom(typeof(IRequestHandler<,>))
.BindAllInterfaces();

不过,这将需要进行两次装配扫描。

另一种方法是编写一个 IBindingGenerator,并在其中执行多个绑定(bind) - 一个使用 WhenInjectedExactlyInto另一个没有。这将只需要使用 .BindWith<MyBindingGenerator>() 的单个基于约定的绑定(bind)。语法而不是 .BindAllInterfaces()

关于ninject - 如何在 Ninject 中装饰实现特定接口(interface)的所有绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com