AutoFac学习摘要

依赖注入(控制反转)
常见的依赖注入工具: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();
        }
    }

时间: 2024-10-26 17:22:55

AutoFac学习摘要的相关文章

a byte of vim -- 学习摘要

说在前面的话 -- a byte of vim 是我见过的最介绍vim 最好的书,想了解强大的vim的人,或者是已经在使用vim而打算进一步了解的人,我感觉都应该看看这个,内容精炼但涵盖很广,--"vim为什么这么强大",当看完这本书时,我想你就能完全的了解了--此外,本书是一英文版,但很简单,学语言的同时学习英语很不多-- 附上最新版的下载链接 http://download.csdn.net/detail/wuzhimang/8933257  ,当然上官网才是硬道理 以下是自己针对

《代码大全》学习摘要(五)软件构建中的设计(下)

这次的学习内容主要是设计过程中的启发式方法和设计实践中的一些经验. 对于具体的编程工作来说,期待确定性的行为是很正常的,由于软件设计是非确定性的,灵活熟练地运用一组有效的启发方法(试探法),便成了合理的软件设计的核心工作. 1.在确定设计方案时,首选且最流行的方法是面向对象的方法,此方法的要点是辨别现实世界中的对象以及人造的对象.这个过程分为以下几步:辨识对象及其属性.确定可以对各个对象进行的操作.确定各个对象能对其他对象进行的操.确定对象的哪些部分对其他对象可见.定义每个对象的公开接口. 2.

《代码大全》学习摘要(四)伪代码编程过程

今天阅读的是<代码大全>的第9章--"伪代码编码过程".看罢本章,我对于编程的方式方法又有了新的认识,可谓是我觉得收获最大的一章,决心按书中的方法去自己实践一下. 正如作者在这一章末尾提到的,"这本书的一个目的就是告诉你怎样脱离那种先东拼西凑,然后通过运行来看代码是否工作的怪圈"(就我自己写代码的过程来看,与这种方式非常相似),在没有完全想好类和子程序的具体功能和流程就开始编码的结果就是做出一个勉强能运行的程序,它可能漏洞百出,但你不知道问题究竟出在哪里

关于优化排名,搜索引擎,站内优化的学习摘要

关于优化排名,搜索引擎,站内优化的学习摘要 你的排名你说了算,学习笔记摘要: 优化排名,不同的人员操作效果不一样,关键词排名行情是变量的,对与不同的网站在操作方式要非常慎重,让你的排名你说了算,掌握专业的SEO优化知识. 排序是有规律的还是没有规律的? 就是人为的为它写一些规则,让电脑去执行,是死的,是有规律的.做SEO就是一直在研究排序的规律. 淘宝也是一个搜索引擎,也有排序规则,与人气.销量.评价.价格这些是它的规则. 搜索引擎也有自己的规律,如何寻找规律呢?我们做调查,人数基数越少越不准确

CSS学习摘要-引入样式

CSS学习摘要-引入样式 注:主要是摘录自MDN 网络开发者这个网站的. CSS 实际上如何工作? 当浏览器显示文档时,它必须将文档的内容与其样式信息结合.它分两个阶段处理文档: 浏览器将 HTML和 CSS转化成 DOM(文档对象模型).DOM在计算机内存中表示文档.它把文档内容和其样式结合在一起. 浏览器显示 DOM 的内容. 如何将你的 CSS 应用到你的 HTML 上 这有你常见的三种不同方式将 CSS 应用到 HTML 文档上,有的方式比其他方式更有用.在这里,我们将简要回顾一下每一种

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

摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a. ^表示行的开头,^\d表示必须以数字开头. $表示行的结束,\d$表示必须以数字结束. 你可能注意到了,py也可以匹配'python'-->py;但是加上^py$就变成了整行匹配,就只能匹配'py'了,匹配'python'时,就什么也得不到. 参考表 正则表达式特殊序

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

来源:Michael_翔_ 摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a. ^表示行的开头,^\d表示必须以数字开头. $表示行的结束,\d$表示必须以数字结束. 你可能注意到了,py也可以匹配'python'–>py; 但是加上^py$就变成了整行匹配,就只能匹配'py'了,匹配'python'时,就什么也得不到

ThinkPHP框架学习摘要

框架在linux与win下区别 1.文件权限设置: 2.大小写不规范: 学习框架的基本思路 : 1.如何收入并配置框架: 2.Controller的命名规范与书写规范: 3.Model的命名规范与书写规范: 4.view的书写规范 5.操作数据的方式: 6.扩展包.工具类的功能

autofac学习

Instance Scope 1.instance per dependency    (the default) builder.RegisterType<classes>();等价于 builder.RegisterType<classes>().InstencePerDenpendency(); 每次都创建一个新的依赖 2.single instance builder.RegisterType<classes>().SingleInstance(); 单例,每次