我正在分析使用Ninject进行DI的应用程序。随着时间的推移,我看到了很多BindingBuilder类的实例,它们用于定义容器中定义的对象。
Ninject的“ToMethod”绑定用于定义容器中的所有对象。然后,lamba中可用于访问内核的上下文用于从容器中检索其他对象。例如:
Bind<IService>()
.ToMethod(ctx => new CustomService(
ctx.Kernel.GetDefault<IOtherService>(),
ctx.Kernel.GetDefault<IAnotherService>()
))
.InSingletonScope();
看到BindingBuilders随着时间的推移而增加或者这些引用是否只存在一次是正常的行为吗?
答案 0 :(得分:2)
ToMethod在BindingBuilder
内为lambda表达式创建一个新的匿名类。您看到的不是BindingBuilder
的实例,而是类似BindingBuilder<T>+c__DisplayClass1<IService>
此外,您没有按预期使用Ninject。上面的绑定可以写得更容易。让Ninject决定注入什么,而不是添加一个探索定义。
Bind<IService>().To<CustomService>.InSingletonScope();