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 ...
随机推荐
- 028——VUE中事件修饰符once
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Accesshelper.cs
using System; using System.Data; using System.Data.OleDb; using System.Collections; using System.IO; ...
- C++复习5.指针数组字符串
C/C++ 指针.数组和字符串 本次学习指针.数组.字符串.引用的内存映像. 1.指针 指针的本质:可以执行的程序是由指令.数据和地址组成的.当CPU访问内存单元的时候,不论是读取还是写入,首先要把内 ...
- 七、dbms_rowid(用于在PL/SQL程序和SQL语句中取得行标识符)
1.概述 作用:用于在PL/SQL程序和SQL语句中取得行标识符(rowid)的信息并建立ROWID,通过该包可以取得行所在的文件号,行所在文件的数据块号,行所在数据块的行号,以及数据库对象号等消息. ...
- 通过格式化字符串漏洞绕过canary
1.1 canary内存保护机制 1.1.1 canary工作原理 canary保护机制类似于/GS保护机制,是Linux下gcc编译器的安全保护机制之一,在栈中的结构如下图所示: 在函数 ...
- python 中 property 属性的讲解及应用
Python中property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回 property属性的有两种方式: 1. 装饰器 即:在方法上应用装饰器 2. 类属性 即 ...
- vim+ctags用法
vim用法 在VIM编辑器的环境下用":make"就可以编译程序,如果程序中有错误,就会显示出来. 下列命令可以快速定位,并修改错误错误 ":c ...
- tensorflow 初学习
tenseroflow 拟合 y = ax*x+b构建神经网络主要分为 4 个步骤:构造数据.构建网络.训练模型.评估及预测模型.此外,还介绍了一些超参数设定的经验和技巧 #coding=utf-8 ...
- Graham扫描法
Graham扫描法求凸包的模板 运行之后可以得到存有凸包顶点的栈s和栈顶指针top,n代表总点数 这个模板我当时调了很久,主要难点有两个,一个是正确的极角排序,一个是出栈入栈的细节操作,逆时针扫描,这 ...
- Linux RTC Test Example rtctest.c hacking
/********************************************************************** * Linux RTC Test Example rtc ...