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. 读取并解析properties文件

    public class SysConfig { private static final Properties properties = new Properties(); static{ Reso ...

  2. rsync数据同步配置

    环境配置 操作系统:centos6.4_64bit A服务器IP:192.168.6.128 B服务器IP:192.168.6.129 以A服务器为基准,将A服务器文件同步到B服务器. 步骤如下: 开 ...

  3. Eclipse MAT: Understand Incoming and Outgoing References

    引用:http://xmlandmore.blogspot.hk/2014/01/eclipse-mat-understand-incoming-and.html?utm_source=tuicool ...

  4. ios9API基础知识总结(二)

    UIAlertView(警告框) UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"标题" message:@&qu ...

  5. talos项目记录

    1. 跑schedule : php src/cli-schedule/cli.php -a sales.coupon.offer-coupons  所用方法在schedule里

  6. linux最大文件句柄数量总结

    转载:http://jameswxx.iteye.com/blog/2096461 useradd -g gid -G gid1,gid2 user usermod -g gid -G gid1,gi ...

  7. BZOJ 2626 JZPFAR(KD-tree)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2626 题意:平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k, ...

  8. 《Programming WPF》翻译 第9章 6.我们进行到哪里了?

    原文:<Programming WPF>翻译 第9章 6.我们进行到哪里了? 只有当任何内嵌控件都没有提供你需要的底层行为时,你将要写一个自定义控件.当你写一个自定义控件,你将要使用到依赖 ...

  9. MySQL库表状态查询

    一. 查看库的各链接状态 对于一个mysql连接或者一个线程,任何时刻都有一个状态,表示其当前正在做什么.一般使用show full processlist查看. +---------+------- ...

  10. 【转】兼容性测试套件(CTS)框架用户手册

    原文网址:http://blog.sina.com.cn/s/blog_416166e90102v6bi.html 兼容性测试套件(CTS)框架用户手册 1.为什么需要兼容性测试(以下称CTS)? 2 ...