Ninject Lazy Load
namespace LayzyLoadTest { [TestClass] public class UnitTest1 { private IKernel InitKernel() { Ninject.IKernel kernel = new Ninject.StandardKernel(new LazyBinding()); //kernel.Load<LazyBinding>(); kernel.Bind<IPerson>().To<Father>(); kernel.Bind<IVehicle>().To<Car>(); kernel.Bind<IPlace>().To<Road>().Named("comm"); kernel.Bind<IPlace>().To<LazyRoad>().Named("lazy"); return kernel; } [TestMethod] public void TestMethod1() { var comm = InitKernel().Get<IPlace>("comm"); comm.CurSpeed(); comm.ShowSpeed(); //Console.WriteLine("------------------------------------------------"); //var lazy = kernel.Get<IPlace>("lazy"); ////lazy.CurSpeed(); ////lazy.ShowSpeed(); }
[TestMethod] public void Lazy() { var lazy = InitKernel().Get<IPlace>("lazy"); lazy.CurSpeed(); Console.WriteLine("----over curspeed--------------------"); lazy.ShowSpeed(); } } }
namespace LayzyLoadTest.LayzyClasses { #region Persons interface IPerson { int RunSpeed(); } class Child : IPerson { public Child() { Console.WriteLine("Ctor Child"); } public int RunSpeed() { Console.WriteLine("Child's Speed"); return 100; } } class Father : IPerson { public Father() { Console.WriteLine("Ctor Father"); } public int RunSpeed() { Console.WriteLine("Father's Speed"); return 1000; } } interface IVehicle { int Improve(); } class Car : IVehicle { public Car() { Console.WriteLine("Car's Ctor"); } public int Improve() { Console.WriteLine("Car Improve"); return 1000; } } class Bicycle : IVehicle { public Bicycle() { Console.WriteLine("Bicycle's Ctor"); } public int Improve() { Console.WriteLine("Bicycle Improve"); return 100; } } #endregion #region Place interface IPlace { int CurSpeed(); int ShowSpeed(); } class Road : IPlace { private readonly IPerson _person; private readonly IVehicle _vehicle; public Road(IPerson person, IVehicle vehicle) { Console.WriteLine(" Road's Ctor "); _person = person; _vehicle = vehicle; } public int CurSpeed() { Console.WriteLine("Road CurSpeed"); return _person.RunSpeed(); } public int ShowSpeed() { Console.WriteLine("Road ShowSpeed"); return _person.RunSpeed() * _vehicle.Improve(); } } class LazyRoad : IPlace { private readonly Lazy<IPerson> _person; private readonly Lazy<IVehicle> _vehicle; public LazyRoad(Lazy<IPerson> person, Lazy<IVehicle> vehicle) { Console.WriteLine(" LazyRoad's Ctor "); _person = person; _vehicle = vehicle; } public int CurSpeed() { Console.WriteLine("LazyRoad CurSpeed"); return _person.Value.RunSpeed(); } public int ShowSpeed() { Console.WriteLine("LazyRoad ShowSpeed"); return _person.Value.RunSpeed() * _vehicle.Value.Improve(); } } #endregion }
namespace LayzyLoadTest { public class LazyBinding : NinjectModule { public override void Load() { this.Bind(typeof(Lazy<>)) .ToMethod( context => ((ILazyLoader)Activator.CreateInstance(typeof(LazyLoader<>).MakeGenericType(context.GenericArguments), new object[] { context.Kernel })).Loader); } public interface ILazyLoader { object Loader { get; } } public class LazyLoader<T> : ILazyLoader { private readonly IKernel _kernel; private static readonly Func<IKernel, Lazy<T>> _lazyLoader = k => new Lazy<T>(() => k.Get<T>()); public LazyLoader(IKernel kernel) { if (kernel == null) throw new ArgumentNullException("kernel"); this._kernel = kernel; } public object Loader { get { return _lazyLoader(this._kernel); } } } } }
Ninject Lazy Load的更多相关文章
- Ninject Lazy Load问题
参考: http://stackoverflow.com/questions/2538132/lazy-loading-with-ninject 方案一: public class Module : ...
- 在 MVC 中使用 ninject Lazy Load的一个想法
这这里先声明一下,引用了一个 (http://www.edcourtenay.co.uk/musings-of-an-idiot/2012/11/23/lazy-binding-with-ninjec ...
- Lazy Load, 延迟加载图片的 jQuery 插件.
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...
- jQuery延迟加载插件(Lazy Load)详解
最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...
- 延迟加载图片的 jQuery 插件:Lazy Load
网站的速度非常重要,现在有很多网站优化的工具,如 Google 的Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it这个工具对图片进行批量压缩,但是对 ...
- Lazy Load 图片延迟加载(转)
jQuery Lazy Load 图片延迟加载来源 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. ...
- jQuery Lazy Load 图片延迟加载
基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. 版本: jQuery v1.4.4+ jQuery ...
- about hibernate lazy load and solution
about hibernate lazy load is that used when loaded again.it can increase efficienty and sava memory. ...
- Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
随机推荐
- MYSQL freedata 外联接
主要是解决,不同生产系统里面,有不同的数据库. SQL 又不能夸系统查询表. 只能在一个系统里,可以跨不同的数据库查表. 所以会用映射 .FREEDATA 这种方式,这样A 系统 里的表更新之后,就可 ...
- hdu 6053 TrickGCD(筛法+容斥)
TrickGCD Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- PHP trim()函数的作用和使用方法
PHP trim()函数一般是用来去除字符串首尾处的空白字符(或者其他字符),一般在用在服务端对接收的用户数据进行处理,以免把用户误输入的空格存储到数据库,下次对比数据时候出错. 该函数有两个参数,第 ...
- tooltip提示框组件
Tooltip 提示框组件 可独立于其他组件通过$.fn.tooltip.defaults重写默认的defaults.当用户移动鼠标指针在某个元素上时,出现提示信息窗口来显示额外信息.提示内容可以包含 ...
- cpu的用户态和内核态和内存的用户空间内核空间
谈到CPU的这两个工作状态,也就是处理器的这两个工作状态,那我们有必要说一下为什么搞出这两个鬼玩意出来. 用过电脑的娃娃们肯定知道在一个系统中既有操作系统的程序,也由普通用户的程序.但那么 ...
- openoffice在连接时有错误,无法连接上
openoffice在连接时有错误,无法连接上 报如下错误: java.net.ConnectException: connection failed: socket,host=localhost,p ...
- UART介绍
https://baike.baidu.com/item/UART/4429746?fr=aladdin
- KAFKA 0.11 RHEL6.5安装
KAFKA简介 KAFKA是一款分布式消息发布和订阅的系统. 官网:http://kafka.apache.org/ 1.下载KAFKA及JDK KAFKA下载地址: http://kafka.apa ...
- 如何看待 Kotlin 成为 Android 官方支持开发语言?
Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言.一时间朋友圈和Android圈被各种刷屏.当然我也顺势而为发布了一篇的文章<为什么我要改用Kotlin&g ...
- PHP简单实例
<?php /** * @author admin * @copyright 2016 *编程实现2+4+6+…+100. * $sum = 0; for($i=2;$i<=100;$i+ ...