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

 

Ninject 在 完成 Bind 以后,会根据Scope  存于列表中。

例如:  Bind<IA>().To<A>().InXXXXScope().

这里A 只是与IA建立了一个映射,A不会实例化,也不会调用A的构造。

当 IKernel.Get<IA>(),的时候,A的构造方法才会被执行调用。

 

假如: 构造方法 A(。。。。) 中有其它被绑定的类型

如 A(IB b,IC c,…..,IZ z)

当 Kernel.Get<IA>() 的时候, 先会执行 Kernel->Get<IA> ,…. <IZ>(),

所以,在 Get的时候,所有与构造相关的类型都会一一实例化,

如果 如果在MVC 是这样一种情况,

  -- Controller( ServericeA, ServiceB )

                  ServericeA(DomainA,DomainB)     ServiceB(DomainB,DomainC)

                      DomainA(Res1,Res2), DomainB(Res3,Res4) …………………………………

 

即使我们执行 Controller.ActionXX(….)

 

在使用 Ninject.作为  Controller 实例化控制器的时候,那可怕的就发生了,一系列对象就开始创建了,这样灾难性的问题就发生,第一慢,第二占用大量内存。

所以,我们要做了出一个在不改写代码的情况下,还要以使用Ninject 构造注入的方法,那就是使用 .NET 4.0 中出现的 Lazy<> 包装构造函数中的参数。

 

变成类似于 Controller(Lazy<ServiceA> ,Lazy<SerivceB>).

                          ServiceA(Lazy<DomainA>,Lazy<DomainB>)……………

                                

这样所有类型成为Lazy Load 方式。

 

但是究竟在哪一层使用呢,

如果在 只在表现层上,意义好像不太大。

如果做业务层面上,好像靠谱一点了吧。

下面就不必要做了。

 

不过,哪里加,还是要再考虑下。

 

扩展:

延迟初始化  http://msdn.microsoft.com/zh-cn/library/vstudio/dd997286(v=vs.100).aspx

在 MVC 中使用 ninject Lazy Load的一个想法的更多相关文章

  1. ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...

  2. 在ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.WebUI的空MVC应用程序 3.使用NuGet安装Ninject库   二.在ASP.N ...

  3. ASP.NET MVC中使用Ninject

    ASP.NET MVC中使用Ninject 在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事 ...

  4. 【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject

    本文参考:http://www.cnblogs.com/willick/p/3299077.html 1.在ASP.NET MVC中一个客户端请求是在特定的Controller的Action中处理的. ...

  5. MVC中使用Ninject依赖注入

    在.NET MVC中使用Ninject注入,主要分为以下几步: 使用NuGet包添加Ninject引用,我添加的是目前最新版本3.34 在App_Start文件夹下,创建NinjectControll ...

  6. Ninject Lazy Load问题

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

  7. Asp.net MVC 中使用 Ninject 实现依赖注入

    松耦合.针对抽象编程.不针对实现编程是面向对象设计的原则.依赖注入就是,在一个类的内部,不通过创建对象的实例而能够获得实现了某个公开接口的对象引用.所谓的控制反转也是相同的意思.把依赖的创建转移到了使 ...

  8. 在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点

    使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; s ...

  9. Ninject Lazy Load

    namespace LayzyLoadTest { [TestClass] public class UnitTest1 { private IKernel InitKernel() { Ninjec ...

随机推荐

  1. java8新特性-lambda表达式和stream API的简单使用

    一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  2. 在线HTTP POST/GET接口测试工具

    在线HTTP POST/GET接口测试工具 http://www.atool.org/httptest.php

  3. java游戏制作之水果忍者

    水果忍者的原理很简单,主要就是采用随机的方式是画面上面出现水果. package Fruitninja; import java.awt.Dimension; import java.awt.Grap ...

  4. python数据字典的操作

    一.什么是字典? 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器 ...

  5. eclipse egit(分支管理 下)

    在Git的分支merge中,不可能没有代码的冲突问题,特别在跟别人分工合作时.那该怎么解决? 1.新建一个conflict分支,在dev方法下添加一句 System.out.println(“Crea ...

  6. Theos简介

    [Theos简介] Theos is a cross-platform suite of development tools for managing, developing, and deployi ...

  7. 1-3 并发与高并发基本概念.mkv

  8. Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法

    1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...

  9. sqLSERVER 计划缓存

    在这一期的性能调优培训里,我想详细谈下SQL Server里计划缓存及其副作用.在上一周你已经学到,每个提交给SQL Server的逻辑查询会编译成物理执行计划.那个执行计划然后会被缓存,即被称为计划 ...

  10. CSS概念 - 可视化格式模型(二) 定位概述(普通流、绝对定位)

    2.定位概念 上一节熟悉了盒模型, 现在来看一下可视化格式模型和定位模型. 理解这两个模型的细微差异是非常重要的, 因为它们一起控制着如何在页面上布置每个元素 2.1 可视化格式模型 CSS有三种基本 ...