Pro ASP.NET MVC 4, 4th edition Reading note---Part(1) DI

What I learned from Pro ASP.NET MVC 4 book

Open source of Asp.net MVC

http://www.opensource.org/licenses/ms-pl.html

1. Introduce new trends of web development

Node.js, Ruby on Rails,

2. Ninject

1) Ninject is used to de-couple classed, which known as DI dependency Inject. It is a DI container.

2) Adding Ninject to the Visual Studio Project

  Open NuGet->Online-> search for ninject

3) How to use Ninject to implement DI

Implement Resolver

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web.Mvc;
 5 using Ninject;
 6 using Ninject.Parameters;
 7 using Ninject.Syntax;
 8 using System.Configuration;
 9 using EssentialTools.Models;
10
11 namespace EssentialTools.Infrastructure
12 {
13     public class NinjectDependencyResolver : IDependencyResolver
14     {
15         private IKernel kernel;
16
17         public NinjectDependencyResolver()
18         {
19             kernel = new StandardKernel();
20             AddBindings();
21         }
22
23         public object GetService(Type serviceType)
24         {
25             return kernel.TryGet(serviceType);
26         }
27
28         public IEnumerable<object> GetServices(Type serviceType)
29         {
30             return kernel.GetAll(serviceType);
31         }
32
33         private void AddBindings()
34         {
35             kernel.Bind<IValueCalculator>().To<LinqValueCalculator>();
36             //Create binding with property value
37             kernel.Bind<IDiscountHelper>().To<DefaultDiscountHelper>().WithPropertyValue("DiscountSize", 50m);
38
39             //Binding when specific condition happened
40             kernel.Bind<IDiscountHelper>().To<FlexibleDiscountHelper>()
41                 .WhenInjectedInto<LinqValueCalculator>();
42         }
43     }
44 }

Inject resolver into Global.asax

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            DependencyResolver.SetResolver(new NinjectDependencyResolver());

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
        }

Use DI relationship in Controller

private IValueCalculator calc;
        //
        // GET: /Home/
        public HomeController(IValueCalculator calcParam)
        {
            calc = calcParam;
        }

3. Moq

It is a dll used to unit testing

时间: 2024-11-03 03:42:36

Pro ASP.NET MVC 4, 4th edition Reading note---Part(1) DI的相关文章

学习ASP.NET MVC 4之一(Pro ASP.NET MVC 4)

① HomeController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace PartyInvites.Controllers { public class HomeController : Controller { public string Index() { return "Hello World

这个时候 快下班了 我来翻译一段: Pro ASP.NET MVC 3 Framework

Binding to a Derived Type绑定派生类型Although we have focused on interfaces (since that is most relevant in MVC applications), we can alsouse Ninject to bind concrete classes. 我们关注这个接口(在mvc 应用里 是意义重要的), 还可以 用Ninject 去绑定这个具体的类 In the previous section, we sh

【ASP.NET MVC 学习笔记】- 04 依赖注入(DI)

本文参考:http://www.cnblogs.com/willick/p/3223042.html 1.在一个类内部,不通过创建对象的实例而能够获得某个实现了公开接口的对象的引用.这种"需要",就称为依赖注入(Dependency Injection). 2.依赖注入和和所谓的控制反转(Inversion of Control )是一个意思. 3.依赖注入是通过接口实现松耦合的设计模式,是解耦的重要手段. 4.依赖注入分为两步:移除对组件的依赖:通过类的构造器(或setter访问器)

ASP.NET MVC进阶之路:深入理解依赖注入(DI)和控制反转(IOC)

0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点.在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行.详细的介绍可以阅读上一篇博文:http://www.cnblogs.com/dazhuangtage/p/5672190.html 0X2 什么是控制反转 在解释什么是控

[ASP.NET MVC 小牛之路]18 - Web API

原文:[ASP.NET MVC 小牛之路]18 - Web API Web API 是ASP.NET平台新加的一个特性,它可以简单快速地创建Web服务为HTTP客户端提供API.Web API 使用的基础库是和一般的MVC框架一样的,但Web API并不是MVC框架的一部分,微软把Web API相关的类从 System.Web.Mvc 命名空间下提取了出来放在 System.Web.Http 命名空间下.这种理念是把 Web API 作为ASP.NET 平台的核心之一,以使Web API能使用在

ASP.NET MVC Area 的使用

MVC提供Area机制,在同一个项目之内就能够切割出不同的ASP.NET MVC网站. 插入:首先在相同的位置,比如说同一个文件夹(如:Controllers)是不能创建俩个相同名称的文件(如:HomeController),其次在不同的文件夹中如fold1和fold2,中各自创建一个TestController,程序能够通过编译,但当浏览器视图执行/Test时,网站报出异常,如图: 因为在默认情况下,路由会同时匹配两个controller,造成无法访问. 在项目上,右键,创建区域,问题解决.

理解ASP.NET MVC中的ModelBinder

模型绑定的本质 任何控制器方法的执行都受action invoker组件(下文用invoker代替)控制.对于每个Action方法的参数,这个invoker组件都会获取一个Model Binder Object(模型绑定器对象).Model Binder的职责包括为Action方法参数寻找一个可能的值(从HTTP请求上下文).每个参数都可以绑定到不同的Model Binder:但是大部分情况我们都使用的是默认模型绑定器-DefaultModelBinder(如果我们没有显式设置使用自定义的Mod

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity Framework的背景信息,然后再详细学习如何搭建开发环境. 1.1 MVC和ASP.NET MVC 这本书涵盖Microsoft版本的MVC,即ASP.NET MVC.在写本书的时候,ASP.NET MVC的生产版本为MVC5,因此,本书的示例代码都使用ASP.NET MVC 5编写.在本书中

ASP.NET MVC 4 (八) URL链接和Ajax帮助函数

使用帮助函数创建链接 MVC提供一些帮助函数创建链接,这些函数根据路径映射表自动调整生成的URL: 说明 示例 输出结果 应用程序相对URL Url.Content("~/Content/Site.css")  /Content/Site.css 到控制器action的链接 Html.ActionLink("My Link", "Index", "Home") <a href="/">My Li