Ninject和配置

我以前使用Castle作为IoC但我在同一个项目中使用Nhibernate / Castle(IoC)时遇到了问题,所以我搬到了Ninject。 现在回答这个问题,我有这个课程:

class CustomModule : NinjectModule { public override void Load() { Bind().To (); } } 

Concrete是一个单独的项目, Interfaces.ICafe是一个不同的项目。 使用Castle我曾经给开发人员提供接口DLL并要​​求他实现一个新的具体实现该接口,然后使用app.config配置它,所以无论他实现什么类名,它仍然有效,因为他必须写入app.config,所以如果他像Concrete.Coffee它仍然可以工作。

但是对于Ninject,他必须使用相同的类名“Tea”来制作一个混凝土,以使其工作,否则它将无法工作,因为它是硬编码的。

我是Ninject的新手,我知道可能有些东西我不见了?

将IoC绑定转移到代码和XML中是一种普遍的趋势(在我知道或遵循的人中)。 大多数情况下,您可以获得智能感知和运行时反馈。 所以,是的,如果你打算以这种方式做事,你必须引用Concrete.Tea。

如果要避免引用具体实现,可以使用constraints扩展在运行时加载实现。

-Ian

我没有使用它,但有Ninject.Extensions.Xml的候选版本允许您在xml中设置映射。 但是我必须同意保罗的意见,我一般会回避这样做。 还有Ninject.Extensions.Conventions ,这可能是你所追求的。