Ninject绑定

如何将我的界面绑定到不同程序集中的具体类?

我的解决方案中有以下项目:

Foo.Data
Foo.Domain

在Structure Map中,我将两个程序集名称添加到StructureMap.config文件中,然后使用PluginFamily和Pluggable属性将我的接口映射到我的具体类’。

如何用Ninject完成同样的事情?

我会在这里做几个假设。

  1. 你的Foo.Domain项目中有一个名为IBar的接口,你的Foo.Data项目中有一个名为BarClass的具体类。
  2. 实际上你在Foo.Data项目中引用了Foo.Domain项目,因为BarClass实现了IBar。

使用Ninject最简单的方法是在Foo.Data中创建一个派生自Ninject的StandardModule的新类:

internal class BarModule : StandardModule { public override void Load() { Bind() .To(); } } 

然后,该类将IBar的请求绑定到具体的BarClass类。 这是您的XML等价物。

下一步是创建Ninject内核(也称为“容器”)并向其提供此模块(即此配置)。 您这样做的地方在很大程度上取决于您正在创建的应用程序类型。 一般而言,您通常会在代码的逻辑入口点或“启动”部分配置内核。 如果它是一个控制台或Windows桌面应用程序,这可能是main()函数的第一件事。

代码是这样的:

 var modules = new IModule[] { new BarModule() }; var kernel = new StandardKernel(modules); 

此时,当你做这样的事情时:

 var barObj = kernel.Get() 

变量barObj引用了BarClass的实例。

总而言之,我完全不能完全理解你的应用程序的所有细微差别 – 例如,程序集是动态加载的,等等。希望这对你有所帮助。