Ninject框架的介绍
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框架的介绍的更多相关文章
- .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍
Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...
- 开源实体映射框架EmitMapper介绍
开源实体映射框架EmitMapper介绍 综述 EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/. Emit ...
- [推荐]dubbo分布式服务框架知识介绍
[推荐]dubbo分布式服务框架知识介绍 CentOS+Jdk+Jboss+dubbo+zookeeper集群配置教程 http://wenku.baidu.com/view/20e8f36bf ...
- Django - Django框架 简单介绍
Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...
- Cocos2d-iPhone V3 (1) 其基本程序常用的行动框架和介绍
Cocos2d-iPhone V3 (1) 其基本程序常用的行动框架和介绍 博客:http://blog.csdn.net/prevention 笔者:犀利哥 - 第一部分:一个 Cocos2d-iP ...
- 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)
家庭洗车APP --- Android客户端开发 之 网络框架包介绍(一) 上篇文章中给大家简单介绍了一些业务.上门洗车APP --- Android客户端开发 前言及业务简单介绍,本篇文章给大家介绍 ...
- Go语言Web框架gwk介绍4
Go语言Web框架gwk介绍 (四) 事件 gwk支持事件系统,但并没有硬编码有哪些事件,而是采用了比较松散的定义方式. 订阅事件有两种方式: 调用On函数或者OnFunc函数 func On(m ...
- Go语言Web框架gwk介绍 3
Go语言Web框架gwk介绍 (三) 上一篇忘了ChanResult ChanResult 可以用来模拟BigPipe,定义如下 type ChanResult struct { Wait syn ...
- Go语言Web框架gwk介绍2
Go语言Web框架gwk介绍 (二) HttpResult 凡是实现了HttpResult接口的对象,都可以作为gwk返回Web客户端的内容.HttpResult接口定义非常简单,只有一个方法: ty ...
随机推荐
- struts 2 --SEVERE: Could not find action or result
SEVERE: Could not find action or result There is no Action mapped for namespace / and action name . ...
- [Leetcode] Longest Consecutive Sequence 略详细 (Java)
题目参见这里 https://leetcode.com/problems/longest-consecutive-sequence/ 这个题目我感觉很难,看了半天别人写的答案,才明白个所以然.下面的代 ...
- 2014-06-13 jq chart
昨天接到上级说要在检测服务器上增加一个可以根据时间来查看服务器信息的线形图,那我首先就在原有的发送监控信息的功能上增加了把信息存入数据库中,然后再数据库中取得数据显示. 至于线形图的插件是jqx 的c ...
- PHP命名空间(Namespace)的使用详解(转)
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- ng-repeat-start ng-repeat-end 的使用
ng-repeat-start与ng-repeat-end时AngularJS(1.2.x)扩展的, 使用这两个指令可以灵活控制遍历形式. 例如: index.html <div class=& ...
- POJ 2888 Magic Bracelet(burnside引理+矩阵)
题意:一个长度为n的项链,m种颜色染色每个珠子.一些限制给出有些颜色珠子不能相邻.旋转后相同视为相同.有多少种不同的项链? 思路:这题有点综合,首先,我们对于每个n的因数i,都考虑这个因数i下的不变置 ...
- 头文件intrins.h
intrins.h 在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便. 内部函数 描述 _crol_ 字符循环左移 _cror_ 字符循环右移 _ir ...
- C#.NET利用ContextBoundObject和Attribute实现AOP技术--AOP事务实现例子
我前两天看见同事用写了用AOP技术实现缓存的方案,于是好奇看了一下这是怎么实现的.原来是用了.NET中的一个类ContextBoundObject和Attribute相关技术.其实个类在.NET Fr ...
- Linux配置完iptables后,重启失效的解决方案
Linux配置完iptables后,重启失效的解决方案 因为只有root用户才可访问1024以下的端口,非root用户登陆是不能启用80端口的.web service 往往启动1024以上的端口,并通 ...
- 什么是野指针?(What is a wild pointer?)
未被初始化的变量称为野指针(wild pointer).顾名思义,我们不知道这个指针指向内存中的什么地址,使用不当程序会产生各种各样的问题. 理解下面的例子: int main() { int *p; ...