这是我在这里的第一篇文章,希望以后也能更多地发表:)

我一直在尝试学习使用温莎城堡而不是使用Ninject,但是有一个功能我无法在温莎中使用“翻译”功能,那就是WhenInjectedInto。

这是使用Ninject摘自Pro ASP.NET MVC 5书中的一个示例

kernel.Bind<IValueCalculator>().To<LinqValueCalculator>();
kernel.Bind<IDiscountHelper>().To<FlexibleDiscountHelper>().WhenInjectedInto<LinqValueCalculator>();

这是一个条件绑定(bind),意味着当绑定(bind)到IValueCalculator的是LinqValueCalculator时,绑定(bind)到IDiscountHelper时应使用FlexibleDiscountHelper,而不是其他任何对象。

如果可能的话,我该如何用温莎复制它?

到目前为止,我有:
container.Register(Component.For<IValueCalculator>().ImplementedBy<LinqValueCalculator>());
container.Register(Component.For<IDiscountHelper>().ImplementedBy<FlexibleDiscountHelper>());

提前致谢,
布鲁诺

最佳答案

我只用DependsOn:

container.Register(
    Component.For<IDiscountHelper>()
             .ImplementedBy<FlexibleDiscountHelper>());

container.Register(
    Component.For<IValueCalculator>()
             .ImplementedBy<LinqValueCalculator>()
             .DependsOn(Dependency.OnComponent<IDiscountHelper, FlexibleDiscountHelper>());

有多种方法可以指定此依赖关系,如果此规范不完全符合您的需要,请查看the documentation

09-18 11:04