• 轻量级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(); 
    }

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

  • 相关阅读:
    android 异步加载图片缩略图
    Java小工具===》在目录内查找包含××(字符串)的文件,并显示行号
    android 录像和拍照功能
    基于socket的上传下载(Java)精简版
    android 瀑布流简单例子
    创建上下文菜单及监听
    一个简单的win32截图例子
    把位图保存为文件源代码
    进程间通讯 —— 共享内存
    解决WIN32窗口不响应WM_LBUTTONDBLCLK消息
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1892762.html
Copyright © 2020-2023  润新知