【转】轻量级IOC框架:Ninject

原文地址:http://www.cnblogs.com/coolcode/archive/2009/11/10/Ninject.html

 

前言

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

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

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

  1. What Is Ninject
  2. 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 配置和使用

如果认为此文对您有帮助,别忘了支持一下哦!

作者:齐飞

来源:http://youring2.cnblogs.com/

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/archive/2012/05/28/2520992.html

时间: 2024-08-07 23:23:48

【转】轻量级IOC框架:Ninject的相关文章

java轻量级IOC框架Guice

Guice是由Google大牛Bob lee开发的一款绝对轻量级的java IoC容器.其优势在于: 速度快,号称比spring快100倍. 无外部配置(如需要使用外部可以可以选用Guice的扩展包),完全基于annotation特性,支持重构,代码静态检查. 简单,快速,基本没有学习成本. Guice和spring各有所长,Guice更适合与嵌入式或者高性能但项目简单方案,如OSGI容器,spring更适合大型项目组织. 注入方式 在我们谈到IOC框架,首先我们的话题将是构造,属性以及函数注入

各大主流.Net的IOC框架性能测试比较

      在上一篇中,我简单介绍了下Autofac的使用,有人希望能有个性能上的测试,考虑到有那么多的IOC框架,而主流的有:Castle Windsor.微软企业库中的Unity.Spring.NET.StructureMap.Ninject等等.本篇文章主要针对这些IOC框架编写测试程序.   Autofac下载地址:http://code.google.com/p/autofac/ Castle Windsor下载地址:http://sourceforge.net/projects/ca

构建支持Ajax的轻量级J2EE框架

ajax|j2ee 话说Buffalo是姓中的写的,支持下国产! 来先顶一个.Buffalo处理Ajax有多牛,嘿嘿 我还真没有正儿八经的整过.惭愧啊,争取在最近好好研究下吧.Buffalo支持和Spring整合.嘿嘿 这也是一个亮点.亮的有些不自在.为啥? 假如你用Spring+Struts+Hibernate来构建的轻量级J2EE框架,Spring和Struts整合有好几种方式,有一种方式不要要论论了.   <plug-in className="org.springframework

Qatrix:专注于高性能应用开发的超轻量级JavaScript框架

文章简介:轻量级高性能的JavaScript框架,Qatrix 1.0 发布. Qatrix是一个简单易用,代码优美,同时专注于高性能应用开发的超轻量级JavaScript框架. Qatrix具有以下几个特点: 硬件加速的动画效果 动画效果基于CSS3 transition,使用native code处理,并具备硬件加速特性,比以往单纯基于JavaScript处理的框架更加流畅,显著提升页面的视觉效果.这也是目前首个支持这种特性的完整JavaScript框架. 高性能代码 支持CSS3和HTML

轻量级JS框架 SaturnJS 2.0正式发布

SaturnJS是一款轻量级JS框架,具有调用灵活和内核小巧等特点. SaturnJS采用按需加载的方式加载各类JS插件,部分插件采用网上开源的JS代码,并且非常易于扩展,帮助开发者快速创建自己的JS代码库,从而提高开发效率.   2.0 完全颠覆1.0的架构方式,而是提供一个虚拟的类,并支持构造函数.继承以及多重继承等类的特性,帮助开发人员更好地使用JS来实现更为复杂的前端应用. 新增特性 配置文件:新增了rtenv.conf配置文件,可以设置各种模块的路径以及开启或关闭某些功能,用户也可以自

常用Flex IOC框架比较分析

IOC(Inversion of Control),也称DI(Dependency Injection),是近年来在软件开发中变得非常流行的一种设计策略.众多的Flex开 发者,探索出了诸如Spring ActionScript.Parsley.Flicc和Swiz这样的IOC框架. 什么是IOC?一言以蔽之,IOC是一种软件设计模式.借助IOC,可用一个独立的对象为其他对象的数据成员填充正确的实现,而不是由这些 对象自己负责此项工作.这样做的好处有两个.第一,可将对象的数据成员声明为接口,从而

ioc-android中IOC框架的缺点

问题描述 android中IOC框架的缺点 感觉现在AndroidIOC框架甚是流行 想了解下它的一些缺点

自己想写一个轻量级的框架 请问大神thinkphp中的common模块是怎样实现的

问题描述 自己想写一个轻量级的框架 请问大神thinkphp中的common模块是怎样实现的 就是我现在有很多的函数 怎样能像放在thinkphp中的common中的function和config中自动调用 求实现方法和原理 最好有代码 在此谢谢了

轻量级javascript 框架Backbone使用指南_javascript技巧

Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用. 借助Backbone 我们可以使用REST的方式来最小化客户端和服务器间的数据传输,从而实现了更快加速的Web页面更新. 能心静下来学习了,以前以为Backbone 是一座高山用起来很难,结果只是学了2天就有一些新的,实在让人开心. 我整理了一下整个BackBone的学习记录在我的GIT里面,大部分事件都有例子并且有详细的注解和解释,结合require.js