Ninject和配置

时间:2011-01-09 14:30:41

标签: c# dependency-injection ninject

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

class CustomModule :  NinjectModule
{
   public override void Load()
   {
       Bind<Interfaces.ICafe>().To <Concrete.Tea>();
   }
}

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

-Ian

答案 2 :(得分:0)

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