轻量级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 增加节点的双击事件
posted @ 2010-07-26 19:59 CoolCode 阅读(2326) | 评论 (2) 编辑
Napkee – Balsamiq Mockups (UI Designer) 的辅助工具
posted @ 2010-02-28 11:00 CoolCode 阅读(1748) | 评论 (2) 编辑
轻量级IOC框架: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的详细内容...