zoukankan      html  css  js  c++  java
  • Ninject(二)——Modules和Kernel

    很多的DI框架中,XML映射文件会快速的增加,而不容易导航。在Ninject中,类型绑定被集中到模块中。每一个模块代表应用程序中的一个独立片段存在。它们可以以你喜欢的方式组织起来。模块只需实现IModule接口,但大多数模块只需简单的从标准模块(StandardModule)派生即可。

    例:

    public class WarriorModule : StandardModule

    {

    public override void Load()

    {

    Bind<IWeapon>().To<Sword>();

    Bind<Samurai>().ToSelf();

    }

    }

     

    一旦创建了模块。就可以把这些对象收集到一个叫内核(kernel)的容器中。可以从字面上理解,这个内核是应用程序的核心。调用内核的Get()方法就可以得到一种类型的实例。

    以下一个例子来阐述如何创建一个内核,然后激活它和通过它来创建一个类型实例。

    例:

    IKernel _kernel = new StandardKernel(new WarriorModule());

    Samurai sam = _kernel.Get<Samurai>();

    sam.Attack("僵尸");

     

    调用Get()方法的结果就是为武士装备了一把剑。因此,调用武士的Attack()方法的结果和以前的结果相同。

    可以创建许多模块,然后把它们传到内核的构造器中。

     

    public class Modul_2 : StandardModule

    {

    ……

    }

    ……

     

    同样的,要记得模块在应用程序中和其它代码以同样的方式执行。不它不只是限于死绑,可以加上其它的语句,

    例:

    public override void Load()

    {

    if (true)

    {

    Bind<IWeapon>().To<Sword>();

    }

    else

    {

    Bind<IWeapon>().To<Shuriken>();

    }

    Bind<Samurai>().ToSelf();

    }

     参考原文:http://ninject.codeplex.com/wikipage?title=Modules%20and%20the%20Kernel&referringTitle=User%20Guide

  • 相关阅读:
    linux ss 网络状态工具
    如何安装最新版本的memcached
    如何通过XShell传输文件
    mysql主从复制原理
    聊聊IO多路复用之select、poll、epoll详解
    聊聊 Linux 中的五种 IO 模型
    pytorch中使用cuda扩展
    pytorch中调用C进行扩展
    双线性插值
    python中的装饰器
  • 原文地址:https://www.cnblogs.com/jams742003/p/1649090.html
Copyright © 2011-2022 走看看