Ninject 2.x细说1.基本使用
本来想使用一下Ninject的,然后搜索了很久,都没找到比较详细的关于Ninject的使用方法等内容.于是乎干脆自己来写几篇介绍Ninject的内容.
1. 依赖注入和 IOC依赖注入和 IOC 的概念 , 可以点击 这里 看之前的文章 . 在这里就不多介绍了 .
2. 环境准备 开发环境: WIN7 + VS2010 SP1 Ninject :本节内容以 Ninject2.2.0.0-release-net-4.0 为基础进行介绍。可以点击 这里 打开 Ninject 的官网进行下载。需要说明的是, CodePlex 上虽然也有 Ninject 项目,但其基本没怎么更新。所以就不要从那里下载了。直接到 Ninject 其官方网站下载吧。3 .简单的例子
? 需求描述 :
系统有任务消息,每个任务消息都有消息号,消息号的产生可以是以配置文件中的基数为基础产生,也可以是根据数据库中的某个字段产生。
? 步骤:
1). 定义一个消息接口:
public interface IMessage
{
/// <summary>
/// 取得消息号
/// </summary>
/// <returns></returns>
string GetMsgNumber();
}
2). 从配置文件中获取消息号,实现消息接口。代码如下:
public class MessageFile : IMessage
{
public string GetMsgNumber()
{
return "从文件中获取消息号!";
}
}
3). 从数据库中获取消息号,实现消息接口。代码如下:
public class MessageDB : IMessage
{
public string GetMsgNumber()
{
return "从数据中读取消息号";
}
}
4). 下面就是准备在我们的应用中注册的接口和接口实现了。代码如下:
using Ninject.Modules;
public class MessageModule : NinjectModule
{
public override void Load()
{
//绑定接口并指定接口的实现。
Bind<IMessage>().To<MessageDB>();
}
}
通过代码我们可以看到,我们只需要继承自 NinjectModule 并重载其 Load ()方法,在 Load ()方法中进行绑定接口并指定其具体实现即可。
5). 接着,就是具体的使用了,代码如下:
using Ninject;
static void Main(string[] args)
{
using (var kernal = new StandardKernel(new MessageModule()))
{
var msg = kernal.Get<IMessage>();
var msgNo = msg.GetMsgNumber();
Console.WriteLine(msgNo);
Console.Read();
}
}
运行代码(注意:在运行代码之前,请将项目的 Framework 选择中 4.0 版本,否则会“未能解析引用的程序集“ Ninject ”,因为它对不在当前目标框架“ .NETFramework,Version=v4.0,Profile=Client ”中的“ System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ”具有依赖关系“异常出现),最后我们可以看到,控制台打出的消息是:
从数据中读取消息号!
在代码中,我们通过 Kernal 的 Get 方法来取得相应的类型实例,在这整个代码过程中,我们只是在 Module 中绑定了接口和实现,然后在其他地方都是通过接口类型来实现代码的。如何需要换成从配置文件中获取消息号,则只需要修改自定义的 Module 中的代码即可。毫无疑问,在程序的类型依赖和耦合方面都有很多优点。
4. 接下来,介绍使用 Ninject 进行依赖注入的几种方式。
? 构造函数注入
首先,定义使用依赖接口初始化的类, 具体如下:
public class MessageCfg
{
private readonly IMessage msg;
/// <summary>
/// 通过接口构造
/// </summary>
/// <param name="msg"></param>
public MessageCfg(IMessage msg)
{
this.msg = msg;
}
public string GetMsgNumber()
{
return this.msg.GetMsgNumber();
}
}
然后,我们的代码就可以这样写了:
using (var kernal = new StandardKernel(new MessageModule()))
{
var msg = kernal.Get<IMessage>();
var msgcfg = new MessageCfg(msg);//构造函数注入
Console.WriteLine(msgcfg.GetMsgNumber());
Console.Read();
}
这里,我们可以初始化 MessageCfg 的时候,只需要使用 kernal.Get<IMessage>() 获取的类型即可,而不用关心其具体是什么。
? 属性注入
首先定义使用属性注入的类,具体如下:
public class MessageCfg
{
//定义接口属性
public IMessage Msg { get; set; }
public MessageCfg() { }
public string GetMsgNumber()
{
return this.Msg.GetMsgNumber();
}
}
具体使用代码如下:
using (var kernal = new StandardKernel(new MessageModule()))
{
//属性注入
var msgcfg = new MessageCfg() { Msg = kernal.Get<IMessage>() };
Console.WriteLine(msgcfg.GetMsgNumber());
Console.Read();
}
其他几种注入都大同小异,使用方式差不多。
最后,我们可以看到使用 Ninject 的基本步骤很简单。只需要定义接口à实现接口à继承 NinjectModule 在其 Load ()方法中指定相应的绑定接口和接口实现à通过自己的 Module 的来初始化 Kernal à通过 Get 方法来获得相应的实现。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
系统设计与分析
Ninject 2.x细说---2.绑定和作用域
摘要: 本节介绍Ninject中提供的几种接口和接口实现的绑定方式,以及介绍了如何设置绑定项、绑定信息以及和条件绑定等内容。同时还介绍了[Inject]特性和接口实现类实例的作用域。 阅读全文
posted @ 2011-11-06 00:03 ♂风车车.Net 阅读(1394) | 评论 (2) 编辑
Ninject 2.x细说---1.基本使用
摘要: 本文以Ninject2.2.0.0为基础,介绍了Ninject的使用方法以及构造函数注入和属性输入的方式,并简单总结了使Ninject的步骤。 阅读全文
posted @ 2011-10-31 23:56 ♂风车车.Net 阅读(1949) | 评论 (6) 编辑
[转]REST
摘要: 表象化状态转变(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格. 阅读全文
posted @ 2009-08-27 13:00 ♂风车车.Net 阅读(402) | 评论 (0) 编辑
[转] DI初学指导
摘要: 这篇文章从较高的层次来一览Dependency Injection(DI)技术。它的目的是在如何使用几种DI容器的背景下,把DI技术概念性地介绍给初学者。 阅读全文
posted @ 2009-07-28 13:08 ♂风车车.Net 阅读(246) | 评论 (0) 编辑
[转]IOC简介
摘要: 转载非常好的 IOC 文章. 阅读全文
posted @ 2009-07-28 13:00 ♂风车车.Net 阅读(648) | 评论 (0) 编辑
[转]用powerdesigner创建access数据库
摘要: 用powerdesigner创建access数据库
阅读全文
posted @ 2008-06-20 23:12 ♂风车车.Net 阅读(745) | 评论 (0) 编辑
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于Ninject 2.x细说1.基本使用的详细内容...