C# 对象和配置

C# 对象和配置,c#,dependency-injection,ninject,C#,Dependency Injection,Ninject,我曾经使用Castle作为IoC,但在同一个项目中使用Nhibernate/Castle(IoC)时遇到问题,所以我搬到了Ninject。现在来回答这个问题,我有一节课: class CustomModule : NinjectModule { public override void Load() { Bind<Interfaces.ICafe>().To <Concrete.Tea>(); } } class CustomModul

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

class CustomModule :  NinjectModule
{
   public override void Load()
   {
       Bind<Interfaces.ICafe>().To <Concrete.Tea>();
   }
}
class CustomModule:Ninject模块
{
公共覆盖无效负载()
{
绑定()到();
}
}
Concrete
是一个单独的项目和
接口。ICafe
是一个不同的项目。对于Castle,我曾经给开发人员接口DLL,让他实现一个新的具体实现该接口,然后用app.config配置它,所以无论他实现什么类名,它仍然有效,因为他必须在app.config中编写它,所以,如果他把它做成混凝土咖啡,它仍然可以用

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


我是Ninject的新手,我知道我可能遗漏了什么?

将IoC绑定转换为代码和XML是一种普遍的趋势(在我认识或追随的人中)。大多数情况下,b/c会让您获得有关出错的intellisense和运行时反馈。所以,是的,你必须有一个具体的参考。茶,如果你想这样做的话

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


-Ian

我没有使用它,但是有一些候选版本允许您使用xml设置映射。然而,我必须同意保罗的观点,我通常会避免这样做。还有一些可能是您想要的。

您能提供样品给我吗?