zoukankan      html  css  js  c++  java
  • 轻量级IOC框架:Ninject

    前言

    前段时间看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 配置和使用

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

  • 相关阅读:
    前端一站式学习地址
    springboot注解开发
    java中的四种内部类使用(1)
    java内存回收机制
    TweenMax详解
    flash渲染机制
    通过字符串名访问变量
    总结调用Flash的几种方法
    flex buider2 的注册
    转:FlexChn.Cn Adobe Flex最佳学习路线
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2459566.html
Copyright © 2011-2022 走看看