依赖注入(控制反转)
常见的依赖注入工具:AutoFac,Spring.Net,Unity等
依赖注入的方式:1.通过构造函数进行注入2.通过属性进行注入

注意:在项目中AutoFac的注入有两次,第一次是将数据访问层的类注入到业务逻辑层。第二次是将业务逻辑层的类注入到UI层。

AutoFac在MVC的使用

我在APP_Start文件夹中新建了一个类命名为AutoFacConfig

定义一个静态的无返回的方法

public static void Register()

{

  

//1.0 创建一个autofac的容器对象
            var bulider = new ContainerBuilder();
            //1.0.1 获取程序集载入到Assembly对象中
            Assembly controllerDll = Assembly.Load("Study.CRM.Site");
            //1.0.1 告诉autofac对象将来实例化的控制器所存在的程序集是Study.CRM.Site.dll
            bulider.RegisterControllers(controllerDll);

#region 2.0 仓储的注册
            //2.0 利用bulider对象开始创建仓储的实现类与对应的仓储接口的对应关系
            //注意:如果加了InstancePerHttpRequest() 每次都是的新的实体进行注入操作

//注册单个仓储来到其对应的接口
            //bulider.RegisterType(typeof(sysFunctionRepository)).As(typeof(IsysFunctionRepository)).InstancePerHttpRequest();

//注册程序中所有的类到其实现接口
            Assembly repositoryAss = Assembly.Load("Study.CRM.Repository");
            bulider.RegisterTypes(repositoryAss.GetTypes()).AsImplementedInterfaces();

#endregion

#region 3.0 业务逻辑层的注册
            //3.0 利用bulider对象开始创建业务逻辑实现类与对应的业务逻辑接口的对象关系
            //单个注册业务逻辑类到其对应的接口
            //bulider.RegisterType(typeof(sysFunctionServices)).As(typeof(IsysFunctionServices)).InstancePerHttpRequest();

//注册业务逻辑程序中的所有类到其实现的接口(AsImplementedInterfaces() 此方法:就是用来自动转成接口的)
            Assembly servicesAss = Assembly.Load("Study.CRM.Services");
            bulider.RegisterTypes(servicesAss.GetTypes()).AsImplementedInterfaces();

//注册当前程序中类型名称的前缀为sysFunction 的所对应类的实例
            //bulider.RegisterTypes(servicesAss.GetTypes().Where(c => c.Name.StartsWith("sysFunction")).ToArray()).AsImplementedInterfaces();

#endregion

//4.0 告诉MVC框架将来所有控制器的对象的创建工作交给autofac.dll中的控制器工厂来完成
            //特点:会利用控制器中的有参数构造函数创建其对象,同时在创建的过程中,会根据构造函数中的
            //接口参数,将此接口的具体实现类的对象注入
            //4.0.1  根据已经注册好的组建创建此容器对象中所有的映射关系的具体实现
            var container = bulider.Build();
            // 4.0.2 将MVC的控制器对象实例 交由autofac来创建
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

}

在global文件中进行注册

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //注册区域路由规则
            AreaRegistration.RegisterAllAreas();
            //注册全局过滤器
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            //注册网站路由
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //优化js,css文件
            BundleConfig.RegisterBundles(BundleTable.Bundles);

//利用AutoFac实现项目的IOC和DI
            AutoFacConfig.Register();
        }
    }

AutoFac学习摘要的更多相关文章

  1. CSS学习摘要-定位实例

    CSS学习摘要-定位实例 注:全文摘自MDN-CSS定位实例 列表消息盒子 我们研究的第一个例子是一个经典的选项卡消息框,你想用一块小区域包括大量信息时,一个非常常用的特征.这包括含有大信息量的应用, ...

  2. CSS学习摘要-定位

    CSS学习摘要-定位 注:全文摘自MDN-CSS定位 定位允许您从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置. 本文解释的是定位 ...

  3. CSS学习摘要-引入样式

    CSS学习摘要-引入样式 注:主要是摘录自MDN 网络开发者这个网站的. CSS 实际上如何工作? 当浏览器显示文档时,它必须将文档的内容与其样式信息结合.它分两个阶段处理文档: 浏览器将 HTML和 ...

  4. a byte of vim -- 学习摘要

    说在前面的话 -- a byte of vim 是我见过的最介绍vim 最好的书,想了解强大的vim的人,或者是已经在使用vim而打算进一步了解的人,我感觉都应该看看这个,内容精炼但涵盖非常广,--& ...

  5. Spring Boot 学习摘要--关于日志框架

    date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...

  6. Spring Boot 学习摘要--关于配置

    date: 2019-12-27 09:00:00 updated: 2019-12-30 13:20:00 Spring Boot 学习摘要--关于配置 学习教程来自:B站 尚硅谷 1. 关于配置 ...

  7. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  8. Python 正则表达式学习摘要及资料

    来源:Michael_翔_ 摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会 ...

  9. 高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要

    目录 摘要 1.合成流水线 2. 预定义UI层 3. paint是什么意思 4. 分层的优势和劣势 5. 视图属性及其处理方式 6. Quads 7. Compositor Frame 8. 关于光栅 ...

随机推荐

  1. mybatis的学习笔记

    前几天学习了mybatis,今天来复习一下它的内容. mybatis是一个基于Java的持久层框架,那就涉及到数据库的操作.首先来提出第一个问题:java有jdbc连接数据库,我们为什么还要使用框架呢 ...

  2. (转)crontab安装(command not found)

    1. 确认crontab是否安装:执行 crontab -l 命令如果报 command not found,就表明没有安装 2. 安装 crontab执行 yum install -y vixie- ...

  3. shell学习指南-阅读笔记

    shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...

  4. css的存在方式和选择器

    css的存在方式 元素内联 页面嵌入 外部引入 元素内联 直接在html的标签中定义样式,类似于: <div style="属性1;属性2;属性3"><div&g ...

  5. 分块编码(Transfer-Encoding: chunked)

    参考链接: HTTP 协议中的 Transfer-Encoding 分块传输编码 一.背景: 持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界:而对于持续连接,这种 ...

  6. python 之栈的实现

    #!/usr/bin/env python # --------------------------------------- # author : Geng Jie # email : gengji ...

  7. API测试自动化——基于CDIF的SOA基本功能(实例篇)

    今天我们通过一些实例来体验一下API的自动化测试,感受一下基于CDIF的SOA的一些基本功能. 传统的测试工具在测试一个API的时候,必须手动填写这个API所需要接收的所有信息,比如一个查询航班动态的 ...

  8. python爬虫实战(二)--------千图网高清图

    相关代码已经修改调试----2017-3-21 实现:千图网上高清图片的爬取 程序运行20小时,爬取大约162000张图片,一共49G,存入百度云.链接:http://pan.baidu.com/s/ ...

  9. 手机自动化测试:Appium代码之Logger

    手机自动化测试:Appium代码之Logger   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自动化测 ...

  10. SQL语句中的日期查询

    我们先创建一个表: CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(10) NULL COMMEN ...