Ninject(二)——Modules和Kernel

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

很多的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

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
ModuleNotFoundError: No module named ‘mmdet.version‘
ModuleNotFoundError: No module named ‘mmdet.version‘
1505 0
|
4月前
|
JavaScript 前端开发
CMD和UMD,ES Module的差别
CMD和UMD,ES Module的差别
|
10月前
|
Python
spyder下报错ModuleNotFoundError: No module named
spyder下报错ModuleNotFoundError: No module named
376 0
|
11月前
关于 Angular Lazy loaded modules 中的 providers
关于 Angular Lazy loaded modules 中的 providers
|
异构计算
ModuleNotFoundError: No module named ‘mmcv._ext‘
最近想将mmsegmentation打包成exe进行使用,但是遇到了一个问题,在打包的过程中不会显示报错信息,但是在执行exe程序之后,exe会出现ModuleNotFoundError: No module named 'mmcv._ext'的报错,导致软件崩溃。
841 0
|
Python
1. 成功解决 Bug:ModuleNotFoundError: No module named 'pip'
Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 87, in _ru
192 0
|
JavaScript 前端开发 测试技术
CommonJS、AMD、CMD、ES6 Modules、ES Harmony
CommonJS、AMD、CMD、ES6 Modules、ES Harmony
148 0
CommonJS、AMD、CMD、ES6 Modules、ES Harmony
|
TensorFlow 算法框架/工具 Python
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
|
JavaScript 前端开发 API
【ES6】Module模块详解
【ES6】Module模块详解
207 0
|
机器学习/深度学习 算法 安全
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
1117 0
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本