zoukankan      html  css  js  c++  java
  • 使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore(一)

    如果你已经准备好了开始MVC4的远航,那我们就闲话少说,背起行装,踏上征途吧!
     
    完成SportsStore电子商务平台,你将学会:
    1.使用MVC4开发你的应用项目.
    2.使用Ninject完成IOC注入.
    3.使用Entity Framework 操作Sql server 数据库.
    4.使用Moq测试你的项目。
     
    好了,现在请启动你的VS2012吧!
     
    我们首先要创建的是一个空的Visual Studio solution。在这个solution中,我们将创建3个工程。
    1. 一个域模块工程。
    2.一个MVC4应用。
    3.一个单元测试工程。
     
    现在我们就创建一个名为SportsStore的空solution,它看起来像下面的截图:
     
     

    工程名

    VS工程模板

    目的

    SportsStore.Domain

    Class Library

    域Entities和logic;

    使用Entity Framework 创建一个repository,并将其设置为一个持久层。

    SportsStore.WebUI

    ASP.NET MVC 4 Web Application

    controllers and views

    SportsStore.UnitTests

    Unit Test Project

    unit tests

     
    你可以删除SportsStore.Domain工程中的class1.cs,我们不会使用它。
    在SportsStore.Domain建两个文件夹Abstract,Entities. 在SportsStore.WebUI中建一个文件夹Infrastructure. 如下图:
     
     
     
    到这一步我们的项目框架的雏形已经出来了,现在我们要为它添加引用。在solusion管理器中,一次右击
    每个工程,选择Add Reference。

    工程名

    工具依赖

    工程依赖

    微软引用

    SportsStore.Domain

    Entity Framework

    None

    System.Web.Mvc

    System.ComponentModel

    .DataAnnotations

    SportsStore.WebUI

    Ninject

    Moq

    SportsStore.Domain

    None

    SportsStore.UnitTests

    Ninject

    Moq

    SportsStore.Domain

    SportsStore.WebUI

    System.Web.Mvc

    System.Web

    Microsoft.CSharp

     
    注意:System.Web.Mvc的版本一定选择4.0.0
     
    设置DI Container
     
    在我们这个应用中,对MVC框架做了很多扩展,这也是我们学习的重点内容,掌握了这些知识点,
    我们再以后的开发项目中,就能得心应手,构建出稳定的,易于扩展和维护的企业应用架构。
    右击SportsStore.WebUI工程的Infrastructure文件夹,选择添加类,类名为NinjectControllerFactory,
    代码如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    using SportsStore.Domain.Abstract;
    using SportsStore.Domain.Entities;
    using Moq;
    using Ninject;
    using SportsStore.Domain.Concrete;
    
    namespace SportsStore.WebUI.Infrastructure
    {
        public class NinjectControllerFactory: DefaultControllerFactory
        {
    
                private IKernel ninjectKernel;
    
                public NinjectControllerFactory() {
                    ninjectKernel = new StandardKernel();
                    AddBindings();
                }
    
                protected override IController GetControllerInstance(RequestContext
                    requestContext, Type controllerType) {
    
                    return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
                }
    
                private void AddBindings() {
    
                   //put bindings here
                }
             }
        }

    我们现在还没有添加任何绑定,但是,当我们需要时,能使用 AddBindings 方法去添加. 现在,我们需要去

    告诉 MVC 我们打算使用 NinjectController class 去创建Controller对象,要实现这一点,请打开SportsStore.WebUI工程的Global.asax.cs 文件,添加代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Http;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using SportsStore.WebUI.Infrastructure;
    
    namespace SportsStore.WebUI
    {
        // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
        // 请访问 http://go.microsoft.com/?LinkId=9394801
    
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                //Added by wangzhiyue 
                //We need to tell MVC that we want to use the NinjectController 
                //class to create controller objects
                ControllerBuilder.Current.SetControllerFactory(new
                             NinjectControllerFactory());
                //Added end
    
                AuthConfig.RegisterAuth();
            }
        }
    }

    启动域模块

     
    现在我们将要启动域模块,在MVC应用中应用领域模型,能使每一件事情都变得完美,因此,域 也就必然 是启动应用的最完美的地方。因为我们要做的电子商务应用,所以,我们需要一个产品,这是在明显不过的事了。右击我们刚刚建立的Entities文件夹,然后新建一个C#类,命名为Product ,代码如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SportsStore.Domain.Entities
    {
        public class Product
        {
            public int ProductID { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public decimal Price { get; set; }
            public string Category { get; set; }
        }
    }
     
    注意这个public关键字,因为我们将域模型分离为独立的工程,所以将访问关键字定义为public,你可以不
    这么做,但这样做有助于模块的分离,使项目层次鲜明、简洁。
     
     如果你觉得从我的文章中学到了知识,那么请继续关注我续篇!
     
    王志岳 塔塔信息技术(中国)股份有限公司 | 开发者导航
  • 相关阅读:
    C# SqlTransaction事务,先从后主
    去除HTML标记
    GIT拉取问题
    QQ音乐API
    解决UEditor编辑器禁用时点击文本编辑器会多加一个字符问题
    UEditor编辑器增加placeholder提示
    C# List去重及优化建议
    ref和out解析
    时间标准格式转换及数值的ToString的格式化
    没有被“怼”,顺利通过华为Android三面,看看面试官都问了我什么?
  • 原文地址:https://www.cnblogs.com/bzwang/p/MVC4_Ninject_EF_Moq.html
Copyright © 2011-2022 走看看