Ninject绑定

时间:2009-08-07 15:45:27

标签: c# ninject

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

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

Foo.Data
Foo.Domain

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

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

1 个答案:

答案 0 :(得分:6)

我会在这里做几个假设。

  1. 你的Foo.Domain项目中有一个名为IBar的接口,你的Foo.Data项目中有一个名为BarClass的具体类。
  2. 您实际上在Foo.Data项目中引用了Foo.Domain项目,因为BarClass实现了IBar。
  3. 使用Ninject最简单的方法是在Foo.Data中创建一个派生自Ninject的StandardModule的新类:

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

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

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

    代码是这样的:

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

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

    var barObj = kernel.Get<IBar>()
    

    变量barObj引用了BarClass的实例。

    所有人都说,我完全不能完全理解你申请的所有细微差别 - 例如程序集是动态加载的,等等。希望这对你有所帮助。