C# MVC IOC、依赖注入
在MVC5中依赖注入,本文介绍通过扫描类型RegisterAssemblyTypes来进行注册
另外还有扫描模块RegisterAssemblyModules来注册
使用Autofac框架进行组件的依赖注入
Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个
先通过Nuget安装程序包
PM> install-package atuofac
PM> install-package atuofac.mvc5
一般的做法是设计一个空的IDependency的接口,让所有想要加入到IOC中的类实现这个接口
interface IDependency{}
public class NormalService:IDependency{public string testIoc(){return "IoC Test";}}
在Global中进行设置
添加引用
using Autofac;
using Autofac.Integration.Mvc;//注册Controller时需要
//获取已加载到此应用程序域的执行上下文中的程序集。Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray();// Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();//var assemblies = Assembly.GetExecutingAssembly();//创建autofac管理注册类的容器实例ContainerBuilder builder = new ContainerBuilder();//注册所有实现了 IDependency 接口的类型Type baseType = typeof(IDependency);builder.RegisterAssemblyTypes(assemblies).Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract).AsSelf().AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();// 设置MVC的DependencyResolver注册点 builder.RegisterControllers(assemblies).AsSelf().PropertiesAutowired().InstancePerLifetimeScope();DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build()));
NormalService的使用
public NormalService normalService { get; set; }[HttpGet]public JsonResult GetIocMethod(){string strIocReturn= normalService.testIoc();return Json(strIocReturn,JsonRequestBehavior.AllowGet);}
如果NormalService是实现接口INormalService的话
public interface INormalService{string testIoc();}
public class NormalService:IDependency,INormalService{public string testIoc(){return "IoC Test";}}
public INormalService normalService { get; set; }[HttpGet]public JsonResult GetIocMethod(){string strIocReturn= normalService.testIoc();return Json(strIocReturn,JsonRequestBehavior.AllowGet);}
除了通过统一实现IDependency的方式来进行注册外,单个类型的注册
builder.RegisterType<NormalService>().As<INormalService>().AsSelf().PropertiesAutowired().InstancePerLifetimeScope();
builder.RegisterType<DbContextScopeFactory>().As<IDbContextScopeFactory>()
.AsSelf().AsImplementedInterfaces()
.InstancePerLifetimeScope().PropertiesAutowired();
这些就是在MVC中进行依赖注入的方式
转载于:https://www.cnblogs.com/pashanhu/p/9656840.html
C# MVC IOC、依赖注入相关推荐
- Lind.DDD.IoC依赖注入与面向方面的实现
IoC是解耦的灵魂,很难想像一个框架中没有IoC会变成什么样子,Lind.DDD里的IoC是通过Unity实现的,由依赖注入(unity)和方法拦截组成(Interception),依赖注入可以通过事 ...
- springboot的IOC依赖注入与控制反转-举例(转载+自己整理)
这个记录是对[1]的整理和简化,便于日后遗忘时迅速恢复记忆. Spring框架有四大原则: ①使用POJO进行轻量级与最小侵入式开发 ②通过依赖注入和基于接口编程实现松耦合 ③通过AOP和默认习惯进行 ...
- ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
初识ASP.NET Core的小伙伴一定会发现,其几乎所有的项目依赖都是通过依赖注入方式进行链式串通的.这是因为其使用了依赖注入 (DI) 的软件设计模式,代码的设计是遵循着"高内聚.低耦合 ...
- asp.net mvc Autofac 依赖注入框架 使用
Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高. 官方网站http://autofac.org/ 源码下载 ...
- Spring整体学习笔记-IoC依赖注入-AOP代理-整合Spring-Mybatis
Spring 简介 行业春天 解决企业级开发的复杂性,使现有的技术更容易使用,本身是个大杂烩,整合了现有的技术框架 不要重复造轮子 SSH:Struct2+Spring+Hibernate SSM:S ...
- Spring.NET 1.3.1 新特性探索系列1——ASP.NET MVC的依赖注入
Spring.NET 1.3.1的程序集Spring.Web.Mvc提供对ASP.NET MVC程序的整合.其中SpringControllerFactory类继承自DefaultController ...
- ASP.NET Core MVC 之依赖注入 Controller
ASP.NET Core MVC 控制器应通过构造函数明确地请求它们地依赖关系,在某些情况下,单个控制器地操作可能需要一个服务,在控制器级别上的请求可能没有意义.在这种情况下,也可以将服务作为 Ac ...
- ASP.NET Core MVC 之依赖注入 View
ASP.NET Core 支持在试图中使用依赖注入.这将有助于提供视图专用的服务,比如本地化或者仅用于填充视图元素的数据.应尽量保持控制器和视图之间的关注点分离.视图所显示的大部分数据应该从控制器传入 ...
- java调用外联服务用xml,Spring IOC 依赖注入的两种方式:XML和注解
IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控.这也就是所谓"控制反转"的概念所在.控制权由应用代码中转到了外部容器,控制权的转移是所谓反转.Io ...
- java dna框架_DNA - IOC依赖注入 - 组件类库 - JAVA开源项目 - 开源吧
相关开源项目 Coinjema:Coinjema这个组件通过AspectJ与Groovy提供了一种强大的依赖注入机制.假如你厌烦一大堆XML配置文件,和需要掌握复杂工厂类与容器的时候,这个non-AP ...
最新文章
- 洛谷 P1678 烦恼的高考志愿
- Java 使用List集合实现图书增删改查
- Supervisor监控
- 谁能答对这道题?如有兴趣,请留下算法,呵呵~
- 多线程的概念及实现方式
- 贪心----最优合并问题
- 深入理解ButterKnife源码并掌握原理(二)
- Linux下LOIC的下载和应用
- dosbox运行C语言,[转载]dosbox的使用方法
- me909嵌入式linux,linux4.1.4上移植ME909s-821,MU609 4G模块驱动
- 二十、融会贯通之全流程操作
- 【ML】什么是数据标准化和归一化?应用场景是什么?
- 计算机丢失msvc80.dll,msvcr80.dll
- Kafka+zookeeper集群搭建
- OpenMVG、OpenMVS配置及学习记录(Win10+VS2015)
- 使用SpringBoot2.x+Themleaf3.0完成用户登录的开发
- 不借助平台怎么开发外贸客户
- Atik工业相机应用案例研究——涡轮叶片氧化铝检测成像系统
- 聊聊通用会员卡/通用打折卡
- Python量化交易03——海龟策略