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

    最近在做Asp.Net MVC的项目时,抽空学习了一下Ninject  Ioc注入, 之前用过微软的Unity Ioc注入,所以准备将这些Ioc注入整理起来.

    1. Ninject是一个轻量级的基于.Net平台的依赖注入框架

    Ninject下载:可以到这里打开Ninject的官网进行下载

     最新源代码地址: http://github.com/ninject/ninject

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

    2. 模型与配置

    (1)模型

    View Code
     public interface ILog
        {
            void Write(string message);
        }
    
        public class SystemLog : ILog
        {
            public void Write(string message)
            {
                Console.WriteLine("Target:SystemLog");
                Console.WriteLine(String.Format("Message:{0}", message)); 
            }
        }

     (2)配置注入接口

    View Code
     public class NinjectConfig : Ninject.Modules.NinjectModule
        {
            //set relationship.
            public override void Load()
            {
                //1.绑定到接口的具体实现
                Bind<ILog>().To<SystemLog>();
                //Bind<ILog>().To<DatabaseLog>();
                Bind<ISysLogService>().To<SysLogService>();
                Bind<IDBLogService>().To<DBLogService>();
                //2.自绑定
                Bind<LogService>().ToSelf();
            }
    
        }

     (3)创建注入管理容器

    private static IKernel kernelObj = new StandardKernel(new NinjectConfig());

     3. 注入方式

    (1) 直接获取接口注入

     //1.依赖接口注入
                 ILog logObj = kernelObj.Get<ILog>();
                 Console.WriteLine("依赖接口注入-----------------");
                 logObj.Write("Hello Ninject!");
                 Console.WriteLine("");

    (2) 构造函数注入

    View Code
    public class SysLogService : ISysLogService
         {
            //构造函数注入
             private ILog _LogInstance;
    
             public SysLogService() { }
    
             /// <summary>
             /// 2.构造函数注入
             /// </summary>
             /// <param name="tempInstance"></param>
             [Inject] //指定注入的构造函数
             public SysLogService(ILog log)
             {
                 _LogInstance = log;
             }
    
              public void WriteLog(string message)
              {
                  if (_LogInstance == null)
                  {
                      Console.WriteLine("_LogInstance 为空, 没有被注入.");
                      return;
                  }
    
                  _LogInstance.Write("_LogInstance已被注入:" + message);
              }
         }

    (3)属性注入

    View Code
    public class LogService
         {   
              //属性注入
             public ILog _LogInstance { get; set; }
    
             public void WriteLog(string message)
             {
                 if (_LogInstance == null)
                 {
                     Console.WriteLine("_LogInstance 为空, 没有被注入.");
                     return;
                 }
    
                 _LogInstance.Write("_LogInstance已被注入:" + message);
             }
             
         }
    View Code
    //3.属性注入/
                 Console.WriteLine("属性注入-----------------");
                 LogService logServiceObj3 = new LogService() { _LogInstance = kernelObj.Get<ILog>() };
                 logServiceObj3.WriteLog("Hello Ninject!");
                 //OR
                 LogService logServiceObj31 = kernelObj.Get<LogService>();
                 logServiceObj31._LogInstance = kernelObj.Get<ILog>();
                 logServiceObj31.WriteLog("Hello Ninject!");
                 Console.WriteLine("");

     (4)Inject特性,在构造函数、属性和字段上加 [Inject]特性指示,以便指定注入的属性、方法和字段等

    如果没有在构造函数上指定[Inject],默认选择需要注入的接口参数最多的一个,如果需要注入接口参数一样多,则为这些项中的第1个构造函数.

    4. 参考网址

    http://www.cnblogs.com/coolcode/archive/2009/11/10/Ninject.html 
    http://www.cnblogs.com/xray2005/archive/2011/10/31/2230900.html 
    http://www.cnblogs.com/xray2005/archive/2011/11/06/2237803.html 
    http://blog.csdn.net/simpkan/article/details/8169740 

    5. Demo下载

     MyIocSolution.rar

    下一步准备整理微软的Unity2.0 Ioc、Castle 注入.

  • 相关阅读:
    《TCP/IP详解》之二:流式数据交互
    《TCP/IP详解》之一:连接建立、断开
    异步日志实现
    关于继承和组合的一点总结
    GitHub源代码管理基本操作 Mossad
    移动APP的开发需求分析 Mossad
    对理想团队模式构建的设想以及对软件流程的理解 Mossad
    C语言I博客作业06
    C语言I博客作业02
    C语言I博客作业03
  • 原文地址:https://www.cnblogs.com/johden2/p/2846260.html
Copyright © 2011-2022 走看看