好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

轻量级IOC框架:Ninject

轻量级IOC框架:Ninject

前言

前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架: Ninject 。通过google搜索发现它是一个开源项目,最新源代码地址是: http://github.com/enkari/ninject/tree/master

用户向导: http://ninject.codeplex.com/wikipage?title=User%20Guide&referringTitle=Home

建议新手请先看看Ninject的介绍:

What Is Ninject Why Use Ninject

我节选其中关于Ninject的好处,并翻译如下:

Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加容易编写、重用性强、易于测试和修改。

搜索博客园尚未找到关于Ninject的使用,因此本文发布一个示例作入门级教程。

 

Ninject入门级示例

像以前的IOC教程那样,拿日志记录做示例应该是非常直观的。

首先编写一个日志记录的接口:

 public interface   ILogger
 {
     void  Write( string  message);
}

 

以及 FlatFileLogger, DatabaseLogger  来实现Logger的逻辑(只是为了演示Ninject的使用,所以具体逻辑是省略的,只是通过控制台告诉大家使用了那个Logger):

 public class   FlatFileLogger  :  ILogger
 {
     public void  Write( string  message)
    {
         Console .WriteLine( String .Format( "Message:{0}" , message));
         Console .WriteLine( "Target:FlatFile" );
    }
}

 public class   DatabaseLogger  :  ILogger
 {
     public void  Write( string  message)
    {
         Console .WriteLine( String .Format( "Message:{0}" , message));
         Console .WriteLine( "Target:Database" );
    }
}

 

Ninject通过 NinjectModule 来配置依赖注入(不知道有没有文件配置,在官方教程里没找到相关资料),这里自定义自己的Module:

 internal class   MyModule  : Ninject.Modules. NinjectModule
 {
     public override void  Load()
    {
        Bind< ILogger >().To< FlatFileLogger >();
        Bind< ILogger >().To< DatabaseLogger >();
    }
}

 

具体调用方法:

 private static   IKernel  kernel =  new   StandardKernel ( new   MyModule ());
 static void  Main( string [] args)
{
     ILogger  logger = kernel.Get< ILogger >();
    logger.Write( "Bruce Say: Hello Ninject!" );
     Console .WriteLine( "continues.." );
     Console .Read();
}

 

通过 kernel.Get< ILogger >() 来获取ILogger的实例,之前在MyModule里先后对 ILogger  绑定了 FlatFileLogger  和  DatabaseLogger ,而kernel.Get< ILogger >() 这里返回第一个绑定的对象,即 FlatFileLogger 。

 

构造函数注入

这里新建一个ITester 和 IocTester, 而IocTester 依赖于ILogger:

 interface   ITester
 {
     void  Test();
}

 class   IocTester : ITester 
 {
     private   ILogger  _logger;
     public  IocTester( ILogger  logger)
    {
        _logger = logger;
    }

     public void  Test()
    {
        _logger.Write( "Bruce Say: Hello Ninject!" );
    }
}

 

下面看看Ninject是怎么配置的,很简单修改MyModule,绑定ITester:Bind< ITester >().To< IocTester >():

 internal class   MyModule  : Ninject.Modules. NinjectModule
 {
     public override void  Load()
    {
        Bind< ILogger >().To< FlatFileLogger >();
        Bind< ITester >().To< IocTester >();
    }
}

 

从以上配置中,我们是看不到 IocTester  和 ILogger  是有依赖关系的,这就是依赖注入的好处。只是简单告诉哪个接口对应哪个类,剩下的任务就可以交给Ninject来处理了。

 private static   IKernel  kernel =  new   StandardKernel ( new   MyModule ());
 static void  Main( string [] args)
{
     ITester  tester = kernel.Get< ITester >();
    tester.Test();
     Console .WriteLine( "continues.." );
     Console .Read();
}

 

另外Ninject 也支持属性、方法等注入,具体可以参考用户向导。

 

IOC的世界有句话是这样说的: Don't call me, I will call you .

 

相关资源

介绍Ninject 在ASP.NET MVC 的应用(英文)

How to use Ninject 2 with ASP.NET MVC

 

另一篇关于微软的IOC框架Unity的介绍:

IOC : Unity 配置和使用

技术尝鲜

 

jquery.jstree 增加节点的双击事件

摘要: 本文基于 jsTree 1.0-rc1 版本增加节点的双击事件。 jsTree 是基于jquery的树插件,支持拖放、复制、删除、快捷键、多选、自定义节点图标、自定义右键菜单、跨页面保存状态等等,总之我想到的它基本上都有了,而且最值得表扬的是它让人感觉一点都不慢哦。  阅读全文

posted @  2010-07-26 19:59  CoolCode 阅读(2326) |  评论 (2)   编辑

 

Napkee – Balsamiq Mockups (UI Designer) 的辅助工具

摘要: 介绍Napkee之前,必须先知道什么是Balsamiq Mockups。Balsamiq Mockups是一种手绘风格的界面设计工具,关于详细资料 Google 一下或用博客园的找找看就可以了。 那么What’s Napkee? 因为Balsamiq Mockups只能导出文件为png和pdf格式 阅读全文

posted @  2010-02-28 11:00  CoolCode 阅读(1748) |  评论 (2)   编辑

 

轻量级IOC框架:Ninject

摘要: Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加容易编写、重用性强、易于测试和修改。 搜索博客园尚未找到关于Ninject的使用,因此本文发布一个示例作入门级教程。 阅读全文

posted @  2009-11-10 17:18  CoolCode 阅读(6491) |  评论 (27)   编辑


作者: Bruce ( 编程的艺术世界 )
出处: http://coolcode.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于轻量级IOC框架:Ninject的详细内容...

  阅读:40次