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

    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(); 
    }

    原创文字只代表本人某一时间内的观点或结论,本人不对涉及到的任何代码担保。转载请标明出处!

  • 相关阅读:
    查漏补缺:QT入门
    添砖加瓦:设计模式(工厂方法模式)
    Luogu 4784 [BalticOI 2016 Day2]城市
    Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
    Luogu 3698 [CQOI2017]小Q的棋盘
    CF547D Mike and Fish
    Luogu 3066 [USACO12DEC]逃跑的BarnRunning Away From…
    Luogu 2403 [SDOI2010]所驼门王的宝藏
    NEERC17 J Journey from Petersburg to Moscow
    Luogu 3350 [ZJOI2016]旅行者
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1892762.html
Copyright © 2011-2022 走看看