1. #region 第二种写法
  2. /// <summary>
  3. /// using(IKernel tKernel=new StandardKernel(new PeoKernelServer()))
  4. /// {
  5. /// ISay tSay= tKernel.Get<ISay>();
  6. /// IPeople tPeople = new PeoEnglish(tSay);
  7. /// tPeople.sayHello();
  8. /// }
  9. /// </summary>
  10. public class PeoKernelServer : NinjectModule
  11. {
  12. public override void Load()
  13. {
  14. Bind<ISay>().To<ChinaSay>();//这个地方用法类似第一种
  15. }
  16. }
  17. #endregion
  18. #region 第一种写法
  19. /// <summary>
  20. /// ISay pSay = PeoKernel.PeoKernelSigle.KernelSingle.Get<ISay>();
  21. /// IPeople pEoChina = new PeoChina(pSay);
  22. /// pEoChina.Name = "陈国岭";
  23. /// pEoChina.sayHello();
  24. /// </summary>
  25. public class PeoKernel
  26. {
  27. protected static PeoKernel _PeoKernel = new PeoKernel();
  28. public static PeoKernel PeoKernelSigle
  29. {
  30. get
  31. {
  32. return _PeoKernel;
  33. }
  34. }
  35. protected Ninject.IKernel _Kernel = null;
  36. public Ninject.IKernel KernelSingle
  37. {
  38. get
  39. {
  40. return _Kernel;
  41. }
  42. }
  43. protected PeoKernel()
  44. {
  45. _Kernel = new StandardKernel();
  46. BindClass();
  47. }
  48. protected void BindClass()
  49. {
  50. #region 简单绑定
  51.  
  52. //_Kernel.Bind<ISay>().To<ChinaSay>();//1、一般绑定,必须有无参数构造函数
  53. #region 绑定方法
  54. //Ø To:绑定到接口的具体实现。
  55. //Ø ToConstant:绑定到某个常量值。
  56. //Ø ToMethod:绑定到方法。
  57. //Ø ToProvider:绑定到某个自定义的对象创建提供程序。
  58. //Ø ToSelf:自绑定
  59. #endregion
  60. //_Kernel.Bind<ISay>().To<EnglishSay>().WithConstructorArgument(true);//2.构造函数中,参数绑定,可以没有无参数构造函数
  61. #region 参数绑定
  62. // Ø WithConstructorArgument:指定构造函数中相关的参数,还有回调方法的重载。
  63. //Ø WithMetadata:指定相关元数据信息。
  64. //Ø WithParameter:指定相关的自定义参数。这个方法也实现构造函数参数值指定,与WithConstructorArgument类似,如:Bind<IMessage>().To<MessageDB>().WithConstructorArgument("msg", 1);同样可以写成:Bind<IMessage>().To<MessageDB>().WithParameter(new ConstructorArgument("msg", 1));
  65. //Ø WithPropertyValue:指定相关的属性值,还有回调方法的重载。
  66. #endregion
  67. //_Kernel.Bind<ISay>().To<EnglishSay>().WithPropertyValue("IsEngOrUSALangle", false);//3.属性绑定,必须有无参构造函数。同样可以写成:Bind<IMessage>().To<MessageDB>().WithParameter(new ConstructorArgument("msg", 1));
  68. //_Kernel.Bind<PeoChina>().ToSelf();//4、自我绑定.自我绑定后,ISay无需传递。IPeople pEoChina = PeoKernel.PeoKernelSigle.KernelSingle.Get<PeoChina>();
  69.  
  70. #endregion
  71. #region 属性注入
  72. //_Kernel.Bind<ISay>().To<AniSay>();
  73. //_Kernel.Bind<AniDog>().ToSelf();//在AniDog中,ISay属性必须添加[Ninject.Inject]特性
  74. #endregion
  75. #region 条件绑定
  76. //把ChinaSay指定为PeoChina中的ISay
  77. _Kernel.Bind<ISay>().To<ChinaSay>().WhenInjectedInto<PeoChina>();//1、一般绑定,必须有无参数构造函数
  78. //把EnglishSay指定为PeoEnglish中的ISay。同时EnglishSay传递参数true
  79. _Kernel.Bind<ISay>().To<EnglishSay>().WhenInjectedInto<PeoEnglish>().WithConstructorArgument(true);//2.构造函数中,参数绑定,可以没有无参数构造函数
  80. _Kernel.Bind<PeoChina>().ToSelf();
  81. _Kernel.Bind<PeoEnglish>().ToSelf();
  82. #endregion
  83. #region 线程调用
  84. _Kernel.Bind<ISay>().To<ChinaSay>().InThreadScope();//可以线程调用
  85. #region 调用 指定了对象在InThreadScope,在使用的代码中分别创建了2个线程来进行模拟,最终每个线程都是创建了一个对象。
  86. using (IKernel tKer = new StandardKernel(new PeoKernelServer()))
  87. {
  88. Thread tT1 = new Thread(new ThreadStart(() =>
  89. {
  90. ISay tPeoSay = tKer.Get<ISay>();
  91. tPeoSay.SayLanager();
  92. }));
  93. Thread tT2 = new Thread(new ThreadStart(() =>
  94. {
  95. ISay tPeoSay = tKer.Get<ISay>();
  96. tPeoSay.SayLanager();
  97. }));
  98. tT1.Start();
  99. tT2.Start();
  100. }
  101. #endregion
  102.  
  103. #endregion
  104. }
  105. }
  106. #endregion
  107. #region 伪代码
  108. public interface ISay
  109. {
  110. string SayLanager();
  111. }
  112. public class ChinaSay : ISay
  113. {
  114. public ChinaSay()
  115. {
  116.  
  117. }
  118. public string SayLanager()
  119. {
  120. return "汉语";
  121. }
  122. }
  123. public class EnglishSay : ISay
  124. {
  125. private bool _isEngOrUSALangle = false;
  126.  
  127. public bool IsEngOrUSALangle
  128. {
  129. get { return _isEngOrUSALangle; }
  130. set { _isEngOrUSALangle = value; }
  131. }
  132. public EnglishSay()
  133. {
  134.  
  135. }
  136. public EnglishSay(bool isEngOrUSALangle)
  137. {
  138. _isEngOrUSALangle = isEngOrUSALangle;
  139. }
  140. public string SayLanager()
  141. {
  142. string strEngLan = "EngLan";
  143. if (_isEngOrUSALangle)
  144. {
  145. strEngLan = "USALan";
  146. }
  147. return strEngLan;
  148. }
  149. }
  150. public interface IPeople
  151. {
  152. string Name { get; set; }
  153. void sayHello();
  154. }
  155. public abstract class PeopleBase : IPeople
  156. {
  157. protected string _Name = "";
  158. public string Name
  159. {
  160. get
  161. {
  162. return _Name;
  163. }
  164. set
  165. {
  166. _Name = value;
  167. }
  168. }
  169.  
  170. public virtual void sayHello()
  171. {
  172. throw new NotImplementedException();
  173. }
  174. }
  175. public class PeoChina : PeopleBase
  176. {
  177. public PeoChina()
  178. {
  179. }
  180. private ISay _Say;
  181. public PeoChina(ISay pSay)
  182. {
  183. _Say = pSay;
  184. }
  185. public override void sayHello()
  186. {
  187. MessageBox.Show(string.Format("我是中国人,我叫:{0},我说:{1}", _Name, _Say.SayLanager()));
  188. }
  189. }
  190. public class PeoEnglish : PeopleBase
  191. {
  192. private ISay _Say;
  193. public PeoEnglish()
  194. {
  195.  
  196. }
  197. public PeoEnglish(ISay pSay)
  198. {
  199. _Say = pSay;
  200. }
  201. public override void sayHello()
  202. {
  203. MessageBox.Show(string.Format("I am English,my name is :{0},I Say:{1}", _Name, _Say.SayLanager()));
  204. }
  205. }
  206.  
  207. public class AniSay : ISay
  208. {
  209. public AniSay()
  210. {
  211.  
  212. }
  213. public string SayLanager()
  214. {
  215. return "wang";
  216. }
  217. }
  218. public class AniDog
  219. {
  220. [Ninject.Inject]//属性注入
  221. public ISay jiao { get; set; }
  222. public void gouJiao()
  223. {
  224. MessageBox.Show(jiao.SayLanager());
  225. }
  226. }
  227. #endregion

Ninject使用介绍的更多相关文章

  1. 轻量级IOC框架:Ninject (上)

    前言 前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架:Ninject.通过google搜索发现它是一个开源项目,最新源代码地址是:http://github.com/enkari/ninje ...

  2. Ninject学习笔记<四>

    前言 前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架:Ninject.通过google搜索发现它是一个开源项目,最新源代码地址是:http://github.com/enkari/ninje ...

  3. ASP.NET MVC使用Ninject

    Ninject是一个快如闪电的,轻量级的.....依赖注入框架,呃呃呃,貌似很少用到,Ninject就是一个DI容器,作用是对ASP.NET MVC程序中的组件进行解耦 ,说到解耦其实也有其他的方式可 ...

  4. Ninject框架的介绍

    Ninject是C#语言的一款依赖性的注入器框架,我认为之所以会出现这个框架是因为类与类由于继承或者接口与类继承而出现的,首先这 个最典型存在是因为接口,首先我们来看看这个用了框架和没有用框架的区别吧 ...

  5. ASP.NET MVC学前篇之Ninject的初步了解

    ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开 ...

  6. [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject

    本人博客已转移至:http://www.exblr.com/liam  为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...

  7. [ASP.NET MVC 小牛之路]05 - 使用 Ninject

    在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事情,续这篇文章之后,本文将用一个实际的示例来 ...

  8. Ninject之旅之十一:Ninject动态工厂(附程序下载)

    摘要 如果我们已经知道了一个类所有的依赖项,在我们只需要依赖项的一个实例的场景中,在类的构造函数中引入一系列的依赖项是容易的.但是有些情况,我们需要在一个类里创建依赖项的多个实例,这时候Ninject ...

  9. Ninject之旅之八:Ninject插件模型(附程序下载)

    摘要 在前面的章节中,我们看了在单一的绑定条件下Ninject能够处理依赖类型,就是说,每个服务类型只绑定到单一的实现类型.然而,有些情况下我们需要绑定一个抽象服务类型到多个实现,这叫多个绑定.多个绑 ...

随机推荐

  1. Hibernate映射一对一关联关系

    映射一对一关联 Hibernate提供了两种映射一对一关联关系的方式,分别是按照外键映射和按照主键映射. 下面是员工表和档案信息表(员工和档案表之间的关系是一对一的关系)  档案表(dept) pub ...

  2. Java Swing 第01记 Hello Word

    首先来一个Java Swing的HelloWord程序. package cn.java.swing.chapter03; import javax.swing.JButton; import jav ...

  3. 关于seajs模块化的搭建

    搭建seajs这个鬼吧!好像必须要用服务器起.... 然后我开始弄了个nodejs服务器. 安装nodejs:在网站上下载,安装,安装.. 打开命令行,输入cdm. 输入node -v ,输出版本信息 ...

  4. 黄金点游戏(js+css)

    一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...

  5. C#检测本地网络状态

    using System; using System.Runtime.InteropServices; public static class NetTool { [Flags] private en ...

  6. c++类的嵌套(1)

    在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现 ...

  7. hdu1000,hdu1001,hdu1002,hdu1003

    hdu1000 仅仅是为了纪念 #include <cstdio> int main() { int a,b; while (scanf("%d%d",&a,& ...

  8. android 滚动的缓冲图片

    -----------------------java实现代码------------------------- private Animation mRotate; mRotate = Animat ...

  9. [.NET] CErrStack 方便地管理错误或异常

    Option Explicit On Option Strict On Imports System.Reflection Imports System.Diagnostics Public Stru ...

  10. hexo环境变量的配置问题

    因为一些个人原因,想尝试在github上用hexo搭建一个博客,于是用npm安装,安装完成之后却一直无法确认hexo的版本问题,cmd中也一直提示hexo -v 不是有效的命令行,在重装了几次Node ...