Ninject使用介绍
- #region 第二种写法
- /// <summary>
- /// using(IKernel tKernel=new StandardKernel(new PeoKernelServer()))
- /// {
- /// ISay tSay= tKernel.Get<ISay>();
- /// IPeople tPeople = new PeoEnglish(tSay);
- /// tPeople.sayHello();
- /// }
- /// </summary>
- public class PeoKernelServer : NinjectModule
- {
- public override void Load()
- {
- Bind<ISay>().To<ChinaSay>();//这个地方用法类似第一种
- }
- }
- #endregion
- #region 第一种写法
- /// <summary>
- /// ISay pSay = PeoKernel.PeoKernelSigle.KernelSingle.Get<ISay>();
- /// IPeople pEoChina = new PeoChina(pSay);
- /// pEoChina.Name = "陈国岭";
- /// pEoChina.sayHello();
- /// </summary>
- public class PeoKernel
- {
- protected static PeoKernel _PeoKernel = new PeoKernel();
- public static PeoKernel PeoKernelSigle
- {
- get
- {
- return _PeoKernel;
- }
- }
- protected Ninject.IKernel _Kernel = null;
- public Ninject.IKernel KernelSingle
- {
- get
- {
- return _Kernel;
- }
- }
- protected PeoKernel()
- {
- _Kernel = new StandardKernel();
- BindClass();
- }
- protected void BindClass()
- {
- #region 简单绑定
- //_Kernel.Bind<ISay>().To<ChinaSay>();//1、一般绑定,必须有无参数构造函数
- #region 绑定方法
- //Ø To:绑定到接口的具体实现。
- //Ø ToConstant:绑定到某个常量值。
- //Ø ToMethod:绑定到方法。
- //Ø ToProvider:绑定到某个自定义的对象创建提供程序。
- //Ø ToSelf:自绑定
- #endregion
- //_Kernel.Bind<ISay>().To<EnglishSay>().WithConstructorArgument(true);//2.构造函数中,参数绑定,可以没有无参数构造函数
- #region 参数绑定
- // Ø WithConstructorArgument:指定构造函数中相关的参数,还有回调方法的重载。
- //Ø WithMetadata:指定相关元数据信息。
- //Ø WithParameter:指定相关的自定义参数。这个方法也实现构造函数参数值指定,与WithConstructorArgument类似,如:Bind<IMessage>().To<MessageDB>().WithConstructorArgument("msg", 1);同样可以写成:Bind<IMessage>().To<MessageDB>().WithParameter(new ConstructorArgument("msg", 1));
- //Ø WithPropertyValue:指定相关的属性值,还有回调方法的重载。
- #endregion
- //_Kernel.Bind<ISay>().To<EnglishSay>().WithPropertyValue("IsEngOrUSALangle", false);//3.属性绑定,必须有无参构造函数。同样可以写成:Bind<IMessage>().To<MessageDB>().WithParameter(new ConstructorArgument("msg", 1));
- //_Kernel.Bind<PeoChina>().ToSelf();//4、自我绑定.自我绑定后,ISay无需传递。IPeople pEoChina = PeoKernel.PeoKernelSigle.KernelSingle.Get<PeoChina>();
- #endregion
- #region 属性注入
- //_Kernel.Bind<ISay>().To<AniSay>();
- //_Kernel.Bind<AniDog>().ToSelf();//在AniDog中,ISay属性必须添加[Ninject.Inject]特性
- #endregion
- #region 条件绑定
- //把ChinaSay指定为PeoChina中的ISay
- _Kernel.Bind<ISay>().To<ChinaSay>().WhenInjectedInto<PeoChina>();//1、一般绑定,必须有无参数构造函数
- //把EnglishSay指定为PeoEnglish中的ISay。同时EnglishSay传递参数true
- _Kernel.Bind<ISay>().To<EnglishSay>().WhenInjectedInto<PeoEnglish>().WithConstructorArgument(true);//2.构造函数中,参数绑定,可以没有无参数构造函数
- _Kernel.Bind<PeoChina>().ToSelf();
- _Kernel.Bind<PeoEnglish>().ToSelf();
- #endregion
- #region 线程调用
- _Kernel.Bind<ISay>().To<ChinaSay>().InThreadScope();//可以线程调用
- #region 调用 指定了对象在InThreadScope,在使用的代码中分别创建了2个线程来进行模拟,最终每个线程都是创建了一个对象。
- using (IKernel tKer = new StandardKernel(new PeoKernelServer()))
- {
- Thread tT1 = new Thread(new ThreadStart(() =>
- {
- ISay tPeoSay = tKer.Get<ISay>();
- tPeoSay.SayLanager();
- }));
- Thread tT2 = new Thread(new ThreadStart(() =>
- {
- ISay tPeoSay = tKer.Get<ISay>();
- tPeoSay.SayLanager();
- }));
- tT1.Start();
- tT2.Start();
- }
- #endregion
- #endregion
- }
- }
- #endregion
- #region 伪代码
- public interface ISay
- {
- string SayLanager();
- }
- public class ChinaSay : ISay
- {
- public ChinaSay()
- {
- }
- public string SayLanager()
- {
- return "汉语";
- }
- }
- public class EnglishSay : ISay
- {
- private bool _isEngOrUSALangle = false;
- public bool IsEngOrUSALangle
- {
- get { return _isEngOrUSALangle; }
- set { _isEngOrUSALangle = value; }
- }
- public EnglishSay()
- {
- }
- public EnglishSay(bool isEngOrUSALangle)
- {
- _isEngOrUSALangle = isEngOrUSALangle;
- }
- public string SayLanager()
- {
- string strEngLan = "EngLan";
- if (_isEngOrUSALangle)
- {
- strEngLan = "USALan";
- }
- return strEngLan;
- }
- }
- public interface IPeople
- {
- string Name { get; set; }
- void sayHello();
- }
- public abstract class PeopleBase : IPeople
- {
- protected string _Name = "";
- public string Name
- {
- get
- {
- return _Name;
- }
- set
- {
- _Name = value;
- }
- }
- public virtual void sayHello()
- {
- throw new NotImplementedException();
- }
- }
- public class PeoChina : PeopleBase
- {
- public PeoChina()
- {
- }
- private ISay _Say;
- public PeoChina(ISay pSay)
- {
- _Say = pSay;
- }
- public override void sayHello()
- {
- MessageBox.Show(string.Format("我是中国人,我叫:{0},我说:{1}", _Name, _Say.SayLanager()));
- }
- }
- public class PeoEnglish : PeopleBase
- {
- private ISay _Say;
- public PeoEnglish()
- {
- }
- public PeoEnglish(ISay pSay)
- {
- _Say = pSay;
- }
- public override void sayHello()
- {
- MessageBox.Show(string.Format("I am English,my name is :{0},I Say:{1}", _Name, _Say.SayLanager()));
- }
- }
- public class AniSay : ISay
- {
- public AniSay()
- {
- }
- public string SayLanager()
- {
- return "wang";
- }
- }
- public class AniDog
- {
- [Ninject.Inject]//属性注入
- public ISay jiao { get; set; }
- public void gouJiao()
- {
- MessageBox.Show(jiao.SayLanager());
- }
- }
- #endregion
Ninject使用介绍的更多相关文章
- 轻量级IOC框架:Ninject (上)
前言 前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架:Ninject.通过google搜索发现它是一个开源项目,最新源代码地址是:http://github.com/enkari/ninje ...
- Ninject学习笔记<四>
前言 前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架:Ninject.通过google搜索发现它是一个开源项目,最新源代码地址是:http://github.com/enkari/ninje ...
- ASP.NET MVC使用Ninject
Ninject是一个快如闪电的,轻量级的.....依赖注入框架,呃呃呃,貌似很少用到,Ninject就是一个DI容器,作用是对ASP.NET MVC程序中的组件进行解耦 ,说到解耦其实也有其他的方式可 ...
- Ninject框架的介绍
Ninject是C#语言的一款依赖性的注入器框架,我认为之所以会出现这个框架是因为类与类由于继承或者接口与类继承而出现的,首先这 个最典型存在是因为接口,首先我们来看看这个用了框架和没有用框架的区别吧 ...
- ASP.NET MVC学前篇之Ninject的初步了解
ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开 ...
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
本人博客已转移至:http://www.exblr.com/liam 为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...
- [ASP.NET MVC 小牛之路]05 - 使用 Ninject
在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事情,续这篇文章之后,本文将用一个实际的示例来 ...
- Ninject之旅之十一:Ninject动态工厂(附程序下载)
摘要 如果我们已经知道了一个类所有的依赖项,在我们只需要依赖项的一个实例的场景中,在类的构造函数中引入一系列的依赖项是容易的.但是有些情况,我们需要在一个类里创建依赖项的多个实例,这时候Ninject ...
- Ninject之旅之八:Ninject插件模型(附程序下载)
摘要 在前面的章节中,我们看了在单一的绑定条件下Ninject能够处理依赖类型,就是说,每个服务类型只绑定到单一的实现类型.然而,有些情况下我们需要绑定一个抽象服务类型到多个实现,这叫多个绑定.多个绑 ...
随机推荐
- Hibernate映射一对一关联关系
映射一对一关联 Hibernate提供了两种映射一对一关联关系的方式,分别是按照外键映射和按照主键映射. 下面是员工表和档案信息表(员工和档案表之间的关系是一对一的关系) 档案表(dept) pub ...
- Java Swing 第01记 Hello Word
首先来一个Java Swing的HelloWord程序. package cn.java.swing.chapter03; import javax.swing.JButton; import jav ...
- 关于seajs模块化的搭建
搭建seajs这个鬼吧!好像必须要用服务器起.... 然后我开始弄了个nodejs服务器. 安装nodejs:在网站上下载,安装,安装.. 打开命令行,输入cdm. 输入node -v ,输出版本信息 ...
- 黄金点游戏(js+css)
一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...
- C#检测本地网络状态
using System; using System.Runtime.InteropServices; public static class NetTool { [Flags] private en ...
- c++类的嵌套(1)
在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现 ...
- hdu1000,hdu1001,hdu1002,hdu1003
hdu1000 仅仅是为了纪念 #include <cstdio> int main() { int a,b; while (scanf("%d%d",&a,& ...
- android 滚动的缓冲图片
-----------------------java实现代码------------------------- private Animation mRotate; mRotate = Animat ...
- [.NET] CErrStack 方便地管理错误或异常
Option Explicit On Option Strict On Imports System.Reflection Imports System.Diagnostics Public Stru ...
- hexo环境变量的配置问题
因为一些个人原因,想尝试在github上用hexo搭建一个博客,于是用npm安装,安装完成之后却一直无法确认hexo的版本问题,cmd中也一直提示hexo -v 不是有效的命令行,在重装了几次Node ...