这这里先声明一下,引用了一个 (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. CentOS 调用.Net 的Web Service,提示连接超时解决方案

    我是使用axis调用.NET 的Web Service ,在Window下跑没有问题,将项目部署到Linux下,发现Web Service 连接超时,百度了下,发现是因为Linux不能直接跑.Net, ...

  2. coprime Sequence

    Do you know what is called ``Coprime Sequence''? That is a sequence consists of nn positive integers ...

  3. linux下编译wpa_supplicant&nbsp;…

    linux下编译wpa_supplicant 收藏 前一段时间只在vs2005下编译成功过.经过近一段时间的琢磨,今天终于在linux下成功编译了wpa_supplicant. 挺简单的事情折腾了这么 ...

  4. Navigator - BOM对象

    Navigator 对象 Navigator 对象包含有关浏览器的信息. 注释:没有应用于 navigator 对象的公开标准,不过所有浏览器都支持该对象. Navigator 对象集合 集合 描述 ...

  5. [luogu3369]普通平衡树(treap模板)

    解题关键:treap模板保存. #include<cstdio> #include<cstring> #include<algorithm> #include< ...

  6. 125. Valid Palindrome判断有效的有符号的回文串

    [抄题]: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ...

  7. 关于box-sizing属性

    写在前面 文中错误或不足之处欢迎指正批评,共同交流! 在项目中写css组件时遇到一个问题: 要求两个按钮均分其父元素宽度,且父元素宽度不固定,像这样: 第一反应很自然的想到使用flex布局,但是由于需 ...

  8. Entity Framework 6.0 Tutorials(8):Custom Code-First Conventions

    Custom Code-First Conventions: Code-First has a set of default behaviors for the models that are ref ...

  9. Action Results in MVC

  10. shell 字符串中定位字符位置 获取字符位置

    linux shell 字符串操作(长度,查找,替换)详解 该博文中描述的如下两个字符串操作, ${string:position} #在$string中, 从位置$position开始提取子串 ${ ...