MVC5.0(三)

MVC+IOC+ORM

备注:IOC、AOP、ORM此处只是带过

概念:

MVC请求进来---路由匹配---找到控制器和Action---控制器是个普通的类,Action是个普通的实例方法,系统通过如下方式完成控制器的实例创建:

路由匹配后得到控制器名称---MVCHandler---ControllerBuilder.GetControllerFactory()---然后创建的控制器的实例。

DefaultControllerFactory默认的控制器工厂,通过修改工厂来实现用容器(IOC)创建控制器实例

步骤:

1 继承DefaultControllerFactory

2 SetFactory----实例化控制器会进到这里

3 引入第三方容器--将控制器的实例化换成容器操作

在Global.asax里 ControllerBuilder.Current.SetControllerFactory(new 第三方容器名称());

代码示例:

    public class ThirdController : Controller
    {
        private IUserService _iUserService = null;
        private ICompanyService _iCompanyService = null;
        private IUserCompanyService _iUserCompanyService = null;
        /// <summary>
        /// 构造函数注入---控制器得是由容器来实例化
        /// </summary>
        /// <param name="userService"></param>
        /// <param name="companyService"></param>
        /// <param name="userCompanyService"></param>
        public ThirdController(IUserService userService, ICompanyService companyService, IUserCompanyService userCompanyService)
        {
            this._iUserService = userService;
            this._iCompanyService = companyService;
            this._iUserCompanyService = userCompanyService;

        }
        // GET: Third
        public ActionResult Index()
        {
            IUserService service = this._iUserService;
            User user = service.Find<User>(2);
            return View();
        }
    }
  public class ElevenControllerFactory : DefaultControllerFactory
    {
        private Logger logger = new Logger(typeof(ElevenControllerFactory));

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            this.logger.Warn($"{controllerType.Name}被构造...");

            IUnityContainer container = DIFactory.GetContainer();
            //return base.GetControllerInstance(requestContext, controllerType);
            return (IController)container.Resolve(controllerType);
        }
    }
    public class MvcApplication : System.Web.HttpApplication
    {
        private Logger logger = new Logger(typeof(MvcApplication));
        protected void Application_Start()
        {

            AreaRegistration.RegisterAllAreas();//注册区域
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);//注册全局的Filter
            RouteConfig.RegisterRoutes(RouteTable.Routes);//注册路由
            BundleConfig.RegisterBundles(BundleTable.Bundles);//合并压缩 ,打包工具 Combres

            ControllerBuilder.Current.SetControllerFactory(new ElevenControllerFactory());

            this.logger.Info("网站启动了。。。");
        }

    }

原文地址:https://www.cnblogs.com/JohnTang/p/11105374.html

时间: 2024-11-14 11:56:20

MVC5.0(三)的相关文章

EF6.0+APS.NET MVC5.0项目初探三(code first实体映射到数据库)

到这里架构就搭建完了,该向里面填充东西的时候了,如上篇:EF6.0+APS.NET MVC5.0项目初探二(类库引用关系及说明) 第一步 :在需要添加EF的类库Domain.DbContext上右击->管理NuGet程序包->找到Entity FrameWork下载安装. 如图: 第二步:新建DbContext 第三步:在类库Domain.Entity上添加引用System.ComponentModel.DataAnnotations(用于验证的引用) 并新建实体类. 1 using Syst

EF6.0+APS.NET MVC5.0项目初探二(类库引用关系及说明)

接着上一篇(EF6.0+APS.NET MVC5.0项目初探一(界面展示),说说我搭建项目的一点心得. 第一步:我喜欢先建一个空的解决方案,只是个人喜好,不喜勿喷,呵呵. 如图: 第二步:添加项目所需要的类库: 如图: 第三步:添加类库引用 UI.Manage->BusinessLogic.BLL,Domain.Entity,Domain.ViewModel,Infrastructure.Common,UI.HtmlHelper BusinessLogic.BLL->Domain.Entity

EF6.0+APS.NET MVC5.0项目初探四(填充各个程序集)

第一步:每次生成数据库是都需要修改的地方 在Domain.DbContext中添加 在Infrastructure.Ioc.DALFactory中添加 第二步:DataAccess.DAL说明: 我们先在此添加一个基类 1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.Entity; 5 using System.Data.Entity.Infrastructu

主攻ASP.NET.4.5.1 MVC5.0之重生:创建UIHelper通用自定义分页和选择开关与PagesHelper和IsSelect简单用法

@helper放入地方 分页效果 选择开关编辑调用 <dl> <dd class="dc1">是否主管:</dd> <dd> @UIHelper.IsSelect("IsManager",Model.IsManager.ToString()); </dd> </dl> 分页调用 <div class="rg5"> @UIHelper.PagesHelper(Vie

主攻ASP.NET.4.5.1 MVC5.0之重生:在项目中使用zTree jQuery 树插件

效果图和json格式 Controllers代码 using HR.Models; using HR.Models.Repository; /************************************************************************************ * 命名空间:HR.Controllers * Controller: TreeController * 版本号: F 1.0.0.0 * 负责人: Markfan * 电子邮箱:[ema

主攻ASP.NET.4.5.1 MVC5.0之重生:政府行政网站常用友情链接跳转javascript[干货分享]

<!-----------------------------------> <script language="JavaScript" type="text/JavaScript"> <!-- function MM_jumpMenu(targ, selObj, restore) { //v3.0 window.open(selObj.options[selObj.selectedIndex].value); if (restore)

II7.0 发布 MVC 4.0 三个小问题记录

原文:II7.0 发布 MVC 4.0 三个小问题记录 1,403.14-Forbidden Web 服务器被配置为不列出此目录的内容 根据提示更改:使用 IIS 管理器启用目录浏览. 打开 IIS 管理器. 在"功能"视图中,双击"目录浏览". 在"目录浏览"页上,在"操作"窗格中单击"启用". 但是改完之后问题依旧,网上又找到说更改web.config节点内容: 1 <system.webServ

IoC实践--用Autofac实现MVC5.0的IoC控制反转方法

Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展.维护更加容易.控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题.下面我就用Autofac实现ASP.NET mvc5.0的IOC控制反转的方法.这里用到是vs2013,Autofac ASP.NET MVC 5 Integration和mvc 5.0.Autofac ASP.N

EF6.0+APS.NET MVC5.0项目初探一(界面展示)

本人是菜鸟,但又是那种啥新技术都想试试的菜鸟,以前写过一个基于webform的基础框架(地址:http://www.51aspx.com/Code/RSFBase).闲来无事就想用微软大叔最新的技术搭建一个框架玩玩.期间也遇到不少问题,现在想把框架的搭建过程写下来,也算是来个总结复习吧. 先将图晒上,欢迎指正. 项目结构图如下: 静态页面是我在网上找的,稍加修改变成动态的了,也不知道侵权不,法盲哈哈 列表界面如下: 编辑添加页面如下: 到现在,叩打叩打的搞了一两天,好不容易将静态页面嫁接到网站上