Ninject绑定

Miy*_*der 2 c# ninject

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

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

Foo.Data
Foo.Domain

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

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

Pet*_*yer 6

我会在这里做几个假设.

  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<IBar>()
      .To<BarClass>();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,该类为IBar的请求建立绑定到具体的BarClass类.这是您的XML等价物.

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

代码是这样的:

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

var kernel = new StandardKernel(modules);
Run Code Online (Sandbox Code Playgroud)

此时,当您执行以下操作时:

var barObj = kernel.Get<IBar>()
Run Code Online (Sandbox Code Playgroud)

变量barObj引用了BarClass的实例.

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