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

public interface IDiscountHelper
{
int ApplyDiscount(int totalParm);
}
public class DeafaultDiscountHelper : IDiscountHeler
{
public int ApplyDiscount(int total)
{
return (int)(0.9 * total);
} }

  

我们在控制台程序里面声明这个接口,但是如何我们想实现IDisountHelper的一个实例,我们必须要创建继承IDiscountHelper的一个类
,就像这样IDiscountHelper discount=new DeafaultDiscountHelper( );现在我们来介绍一下Ninject,看看他如何实现上面的对

IDiscountHelper接口的实例的创建,Ninject是一个容器,这个容器可以帮我们处理文件的由于继承而产生的依赖,从而返回一个我们

想要的实例,对他的作用就是返回一个实例,我们看看他实现的代码,首先你得下一个Ninject的包,网上有很多教程,这里就不详细讲

--------
using Ninject;
--------
--------
IKernel ke = new StandardKernel();//Ikernel是Ninject的核心组件,通过创建这个实例来调用Ninject框架
ke.Bind<IDiscountHeler>().To<DeafaultDiscountHelper>();//将DeafaultDiscountHelper绑定到IDiscountHeler接口上
IDiscountHeler cd= ke.Get<IDiscountHeler>();//用ke返回接口的实例
Console.WriteLine(cd.ApplyDiscount());//调用接口的方法 返回结果18

我们通过Ninject成功将一个接口的给间接实例化,这个代码看起来比上面一行代码(IDiscountHelper discount=new
DeafaultDiscountHelper( ))累赘的多,但是假如有很多依赖性复杂关系时,这个就框架的作用就非常明显了。
接下来看看下面代码,再声明一个类

public class LinqValue
{
private IDiscountHeler discounter;
public LinqValue(IDiscountHeler dis)
{
discounter = dis;
} public int value(int m){
return discounter.ApplyDiscount(m);
}
}

现在我们要创建的这个类的实例时我们不用框架要怎么做,

IDiscountHelper discount=new DeafaultDiscountHelper( );
LinqValue li=new LinqValue(discount);

我们只有经过上面两个步骤时才可以使用LinqValue的value方法,当然一个这样看起来还挺轻松但是如果我们的项目比较大的时候我们
就非常费力了,我们只有用一行代码就可以实现上面的功能(已绑定接口)
LinqValue li=ke.Get<LinqValue>();这个看起来很不可思议我们只是请求LinqValue这个类Ninject就帮我们把其中的依赖接口的实例绑

定好了,我们直接可以使用li.value(20)就可以返回结果,其实第一次看到这个框架时并没有发觉它的强大,后来在使用的过程中发现这

个框架非常强大,它成功的实现了DI的设计理念,把文件的依赖性分离,我们使用LinqValue是为了实现通用性,利用接口的这个抽象类

将类中的方法实现了通用性,当我们想使用不同的继承接口的类的来调用其方法,我们可以将Ninject绑定到不同的地方。Ninject是一个

开源框架,我们可以从github上下载源代码研究。

Ninject框架的介绍的更多相关文章

  1. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  2. 开源实体映射框架EmitMapper介绍

    开源实体映射框架EmitMapper介绍   综述       EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/.       Emit ...

  3. [推荐]dubbo分布式服务框架知识介绍

    [推荐]dubbo分布式服务框架知识介绍 CentOS+Jdk+Jboss+dubbo+zookeeper集群配置教程    http://wenku.baidu.com/view/20e8f36bf ...

  4. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  5. Cocos2d-iPhone V3 (1) 其基本程序常用的行动框架和介绍

    Cocos2d-iPhone V3 (1) 其基本程序常用的行动框架和介绍 博客:http://blog.csdn.net/prevention 笔者:犀利哥 - 第一部分:一个 Cocos2d-iP ...

  6. 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)

    家庭洗车APP --- Android客户端开发 之 网络框架包介绍(一) 上篇文章中给大家简单介绍了一些业务.上门洗车APP --- Android客户端开发 前言及业务简单介绍,本篇文章给大家介绍 ...

  7. Go语言Web框架gwk介绍4

    Go语言Web框架gwk介绍 (四)   事件 gwk支持事件系统,但并没有硬编码有哪些事件,而是采用了比较松散的定义方式. 订阅事件有两种方式: 调用On函数或者OnFunc函数 func On(m ...

  8. Go语言Web框架gwk介绍 3

    Go语言Web框架gwk介绍 (三)   上一篇忘了ChanResult ChanResult 可以用来模拟BigPipe,定义如下 type ChanResult struct { Wait syn ...

  9. Go语言Web框架gwk介绍2

    Go语言Web框架gwk介绍 (二) HttpResult 凡是实现了HttpResult接口的对象,都可以作为gwk返回Web客户端的内容.HttpResult接口定义非常简单,只有一个方法: ty ...

随机推荐

  1. edmx文件

    MethodBase 提供有关方法的信息 在System.Reflector命名空间之下 edmx edmx:Runtime节点下包含与EF有关的定义与映射信息 edmx:ConceptualMode ...

  2. FineUI上传控件

    文件上传 现在就简单多了,并且也漂亮多了,参考这个示例. 1: <ext:SimpleForm ID="SimpleForm1" BodyPadding="5px& ...

  3. sql语句的分类

    这些天在看Oracle database 11g SQL开发指南,关于sql语句的分类,感觉有必要记录一下. sql语句主要分五类: DML(DATA MANIPULATION LANGUAGE, 数 ...

  4. Jboss基础及简单的应用

    初学Jboss,对于Jboss的基础认识以及配置做一些记录 Jboss基础: JBoss是什么–基于J2EE的应用服务器–开放源代码–JBoss核心服务不包括支持servlet/JSP的WEB容器,一 ...

  5. java 编码转换

    在网络中爬取到的数据,编码可能与当前编译器的编码不相同,而导致可能产生显示乱码的问题.那么如何将网络的编码,转换为当前编译器认可的编码(一般为UTF-8),就是个问题了. 主要使用了两个方法: Str ...

  6. CSS3学习之圆角box-shadow,阴影border-radius

    最近经常玩腾讯微博,出来职业习惯,看看它的CSS,里面运用了大量的css3的东东,有一处用到了Data URI,还有css e­xpression有争议的地方,对png24图片的处理也是用滤镜,类似( ...

  7. python - num1 -初识python

    一.了解python python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  8. 用Python制作markdown编辑器

    还记得在上篇提到的rest-framework,文档中提到了markdown也是可选应用. 那么这篇我们就来尝试使用markdown来制作一个在线的可以预览的editor. 安装 Python Mar ...

  9. 1169 二叉树遍历(XCOJ DFS)

    给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 样例输入 BADC BDCA 样例输出 ABCD #include <iostream> ...

  10. JDK Linux环境配置

    ① $sudo vi /etc/profile ② 在末尾行添加 #set java environment JAVA_HOME=/usr/local/jdk1.7.0 CLASSPATH=.:$JA ...