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的更多相关文章

  1. Ninject Lazy Load问题

    参考: http://stackoverflow.com/questions/2538132/lazy-loading-with-ninject  方案一: public class Module : ...

  2. 在 MVC 中使用 ninject Lazy Load的一个想法

    这这里先声明一下,引用了一个 (http://www.edcourtenay.co.uk/musings-of-an-idiot/2012/11/23/lazy-binding-with-ninjec ...

  3. Lazy Load, 延迟加载图片的 jQuery 插件.

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  4. jQuery延迟加载插件(Lazy Load)详解

    最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...

  5. 延迟加载图片的 jQuery 插件:Lazy Load

    网站的速度非常重要,现在有很多网站优化的工具,如 Google 的Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it这个工具对图片进行批量压缩,但是对 ...

  6. Lazy Load 图片延迟加载(转)

    jQuery Lazy Load 图片延迟加载来源 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. ...

  7. jQuery Lazy Load 图片延迟加载

    基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. 版本: jQuery v1.4.4+ jQuery ...

  8. about hibernate lazy load and solution

    about hibernate lazy load is that used when loaded again.it can increase efficienty and sava memory. ...

  9. Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

随机推荐

  1. laravel中composer镜像服务的方式

    系统全局配置:即将配置信息添加到Composer的全局配置文件config.json中. 单个项目配置:将配置信息添加到某个项目的composer.json文件中. 例1:修改Composer的全局配 ...

  2. 【51nod-1396】还是01串

    给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等. 注意: (1) 如果 ...

  3. redis高级应用特征

    Redis高级应用特性 1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性 设置客户端连接后进行任何其他指定前需要使用的密码. 警告:因为redis速 ...

  4. 2018.11.13 N4010A 通信设置

    设置电脑之IP地址及Subnet mask.      IP address: 192.168.1.2      Subnet mask: 255.255.255.0, 其它选项为默认. 然后点击OK ...

  5. JSP的EL和JSTL解析

    1. EL 简介EL 全名为Expression Language,所有EL都是以${ 为起始.以} 为结尾的.EL 语法很简单,它最大的特点就是使用上很方便. 接下来介绍EL 主要的语法结构: ${ ...

  6. 用JQuery怎么去一次性获取 aspTextBox 文本框的值

    如:<asp:TextBox ID="txtSubject" runat="server">aa</asp:TextBox> 第一次用服 ...

  7. JFinal源码详解

    JFinal的框架我24号的一篇博文写到过,它优秀的地方在精简代码上,那么有两处源码是我觉得是值得我们要好好解析一下,一处是初始化加载—servlet跳转,另一处是DB+ActiveRecord的映射 ...

  8. java 导入Excel -- 套路及代码分析

    一.思路分析 1.我们要做导入,实际上也就是先文件上传,然后读取文件的数据. 2.我们要有一个导入的模板,因为我们导入的Excel列要和我们的数据字段匹配上,所以我们要给它来一个规定,也就是模板. 3 ...

  9. BitArray类的使用--(转换二进制数的内部实现过程)

    BitArray类用来处理位集合. 它和ArrayList十分类似,可以动态调整大小,可以在需要的时候添加二进制位而不用担心数组越界的问题.(所以本质它也是集合里套一个数组,可能是线性数组) 什么是位 ...

  10. C++语言的url encode 和decode

    std::string UrlEncode(const std::string& szToEncode) { std::string src = szToEncode; char hex[] ...