【C#MVC】.NET中的IOC--Autofac简单使用
2016-11-07 11:53
676 查看
Autofac是.NET世界中的IOC容器,据说是效率最高的IOC。
使用IOC的优点大家很清楚,不太懂的请移步百度。由于我的博客最主要的目的之一是为了给自己看,以便以后使用,所以里面例子会多一点,讲解很少,有些我理解的就一笔带过了。
因为我学习Autofac,在网上检索时,大部分人做例子总会先说Interface解耦,然后才引出IOC。我只想说IOC跟Interface貌似没多大关系。IOC只是将对象的控制权进行翻转,由原来的主动获取,变为由IOC注入,跟Interface有什么关系…这样写便有点误导人了,好像觉得,使用IOC不用Interface跟不对似得。实际上作为我来说,我使用IOC的目的很单纯,就是统一管理,加大程序的灵活性和可维护性。其他都是扯淡。理想的解耦固然好,但是不能过度追求解耦。甚至有些对对象的生成效率有要求的程序还要考虑是否使用IOC呢,因为IOC对对象的生成效率是有一定的影响的。
在这之前先记录一下,对Interface使用的一点理解。当然是以我目前的水准的理解。是对当前的一点记录。若有不对,请指正。
无论是我以前在学习JAVA还是现如今的.NET。对Interface的使用并不是很广泛。也并没有什么太大影响。当然是以我目前接触的项目来看。按照Interface设计理念是可以很好地解耦的,但是我觉得在某种程度上,如果项目不改动不大,若盲目的使用Interface也是一种病态的追求心里。只能说取舍着使用。对于经常变动的部分使用Interface进行隔离,但是也并非是每个service、每个manager都需要一个Interface去对应,这样灵活性反而更差。
上面也说了很多,目的之一就是让自己以后明白,使用IOC跟是否使用Interface没有半毛钱关系,反转的是对象的控制权,Interface是对象,非Interface也是对象。
引入Autofac.dll,Autofac.Configuration.dll。
1.在Global.asax文件中添加:
扫描所有dll,然后为实现IDependency接口的类,进行IOC注册,当然还有其他注册方式,我觉得这是一种简单的注册方式。
2.注入方式:
默认支持构造函数注入。
属性注入需要在注册组件是加入PropertiesAutowired()方法即可。
使用IOC的优点大家很清楚,不太懂的请移步百度。由于我的博客最主要的目的之一是为了给自己看,以便以后使用,所以里面例子会多一点,讲解很少,有些我理解的就一笔带过了。
因为我学习Autofac,在网上检索时,大部分人做例子总会先说Interface解耦,然后才引出IOC。我只想说IOC跟Interface貌似没多大关系。IOC只是将对象的控制权进行翻转,由原来的主动获取,变为由IOC注入,跟Interface有什么关系…这样写便有点误导人了,好像觉得,使用IOC不用Interface跟不对似得。实际上作为我来说,我使用IOC的目的很单纯,就是统一管理,加大程序的灵活性和可维护性。其他都是扯淡。理想的解耦固然好,但是不能过度追求解耦。甚至有些对对象的生成效率有要求的程序还要考虑是否使用IOC呢,因为IOC对对象的生成效率是有一定的影响的。
在这之前先记录一下,对Interface使用的一点理解。当然是以我目前的水准的理解。是对当前的一点记录。若有不对,请指正。
无论是我以前在学习JAVA还是现如今的.NET。对Interface的使用并不是很广泛。也并没有什么太大影响。当然是以我目前接触的项目来看。按照Interface设计理念是可以很好地解耦的,但是我觉得在某种程度上,如果项目不改动不大,若盲目的使用Interface也是一种病态的追求心里。只能说取舍着使用。对于经常变动的部分使用Interface进行隔离,但是也并非是每个service、每个manager都需要一个Interface去对应,这样灵活性反而更差。
上面也说了很多,目的之一就是让自己以后明白,使用IOC跟是否使用Interface没有半毛钱关系,反转的是对象的控制权,Interface是对象,非Interface也是对象。
引入Autofac.dll,Autofac.Configuration.dll。
1.在Global.asax文件中添加:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); var builder = RegisterAll(); DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build())); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } public ContainerBuilder RegisterAll() { var builder = new ContainerBuilder(); Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray(); Type baseType = typeof(IDependency); builder.RegisterAssemblyTypes(assemblies) .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract) .AsSelf().AsImplementedInterfaces() .PropertiesAutowired().InstancePerLifetimeScope(); builder.RegisterControllers(assemblies).PropertiesAutowired(); return builder; }
扫描所有dll,然后为实现IDependency接口的类,进行IOC注册,当然还有其他注册方式,我觉得这是一种简单的注册方式。
2.注入方式:
默认支持构造函数注入。
属性注入需要在注册组件是加入PropertiesAutowired()方法即可。
相关文章推荐
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- Asp.net MVC 使用Autofac的简单使用 IOC
- Asp.net MVC 使用Autofac的简单使用 IOC
- Asp.net MVC 使用Autofac的简单使用 IOC
- C#:使用MVC和Mybatis(IBatis.Net)搭建项目(一)
- [.Net Core] 简单使用 Mvc 内置的 Ioc(续)
- ASP.NET MVC中简单使用Autofac
- 【.Net码农】【Autofac】Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac
- .NET:在ASPX、ASHX和MVC中使用IOC容器(菜鸟必看)
- [.Net Core] 简单使用 Mvc 内置的 Ioc(续)
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
- 简单使用 Mvc 内置的 Ioc
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
- c# Ioc+AOP+MVC使用
- [.Net Core] 简单使用 Mvc 内置的 Ioc
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
- 一起谈.NET技术,关于C#线程,线程池和并行运算的简单使用和对比
- 依赖注入框架Autofac的简单使用,以及在 ASP.NET MVC 中的使用
- [Solution] 使用Autofac在MVC、Web API、WCF中实现IOC
- 关于.NET、ASP.NET、C#、WinFrom、MVC以及WebForm的简单描述