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. HTML5 prefetch即预加载

    原文地址 声明:此文带着自己的理解,不完全按原文翻译 prefetch 即预加载,在用户需要前我们就将所需的资源加载完毕. 有了浏览器缓存,为何还需要预加载? 用户可能是第一次访问网站,此时还无缓存 ...

  2. vs2015体验

    项目结构 bower.json Bower依据此文件安装需要的前端的包 package.json NPM依据此文件获取对应的包 project.json 包含用于NPM的"poststore ...

  3. 转载: jQuery事件委托( bind() \ live() \ delegate()) [委托 和 绑定的故事]

    转载:http://blog.csdn.net/zc2087/article/details/7287429 随着DOM结构的复杂化和Ajax等动态脚本技术的运用,事件委托自然浮出了水面.jQuery ...

  4. Jasper_table_pass parameter to table component

    <subDataset name="Dataset1" uuid="2a894ef4-dbcc-47df-bfaf-027766c7352e"> 2 ...

  5. spark提交任务的流程

    1.spark提交流程 sparkContext其实是与一个集群建立一个链接,当你停掉它之后 就会和集群断开链接,则属于这个资源的Excutor就会释放掉了,Driver 向Master申请资源,Ma ...

  6. JSP页面中文参数传递get和post方法分析

    原文 http://developer.51cto.com/art/200907/133499.htm 在项目中,我们经常遇到需要在JSP页面切换中传递中文字符.这主要有两种方式. ◆URL方式 例如 ...

  7. Android和FTP服务器交互,上传下载文件(实例demo)

    今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...

  8. uva 10401 Injured Queen Problem(dp)

    题目链接:10401 - Injured Queen Problem 题目大意:给出一个字符串,要求在n * n(n为字符串的长度)的棋盘上摆放n个受伤的皇后,受伤的皇后只能攻击到同一列和它周围8个格 ...

  9. elasticsearh 中每个节点中需要有相同的插件

    elasticsearh 中每个节点中需要有相同的插件 [2016-09-13 19:25:24,049][INFO ][discovery.zen ] [node02] failed to send ...

  10. Intel 凌动 D525 产品参数Intel 凌动 Z3735F 产品参数

    https://item.taobao.com/item.htm?spm=a230r.1.14.8.kauehT&id=40450541158&ns=1&abbucket=19 ...