在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、依赖注入相关推荐

  1. Lind.DDD.IoC依赖注入与面向方面的实现

    IoC是解耦的灵魂,很难想像一个框架中没有IoC会变成什么样子,Lind.DDD里的IoC是通过Unity实现的,由依赖注入(unity)和方法拦截组成(Interception),依赖注入可以通过事 ...

  2. springboot的IOC依赖注入与控制反转-举例(转载+自己整理)

    这个记录是对[1]的整理和简化,便于日后遗忘时迅速恢复记忆. Spring框架有四大原则: ①使用POJO进行轻量级与最小侵入式开发 ②通过依赖注入和基于接口编程实现松耦合 ③通过AOP和默认习惯进行 ...

  3. ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便

    初识ASP.NET Core的小伙伴一定会发现,其几乎所有的项目依赖都是通过依赖注入方式进行链式串通的.这是因为其使用了依赖注入 (DI) 的软件设计模式,代码的设计是遵循着"高内聚.低耦合 ...

  4. asp.net mvc Autofac 依赖注入框架 使用

    Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高. 官方网站http://autofac.org/ 源码下载 ...

  5. Spring整体学习笔记-IoC依赖注入-AOP代理-整合Spring-Mybatis

    Spring 简介 行业春天 解决企业级开发的复杂性,使现有的技术更容易使用,本身是个大杂烩,整合了现有的技术框架 不要重复造轮子 SSH:Struct2+Spring+Hibernate SSM:S ...

  6. Spring.NET 1.3.1 新特性探索系列1——ASP.NET MVC的依赖注入

    Spring.NET 1.3.1的程序集Spring.Web.Mvc提供对ASP.NET MVC程序的整合.其中SpringControllerFactory类继承自DefaultController ...

  7. ASP.NET Core MVC 之依赖注入 Controller

    ASP.NET Core MVC 控制器应通过构造函数明确地请求它们地依赖关系,在某些情况下,单个控制器地操作可能需要一个服务,在控制器级别上的请求可能没有意义.在这种情况下,也可以将服务作为  Ac ...

  8. ASP.NET Core MVC 之依赖注入 View

    ASP.NET Core 支持在试图中使用依赖注入.这将有助于提供视图专用的服务,比如本地化或者仅用于填充视图元素的数据.应尽量保持控制器和视图之间的关注点分离.视图所显示的大部分数据应该从控制器传入 ...

  9. java调用外联服务用xml,Spring IOC 依赖注入的两种方式:XML和注解

    IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控.这也就是所谓"控制反转"的概念所在.控制权由应用代码中转到了外部容器,控制权的转移是所谓反转.Io ...

  10. java dna框架_DNA - IOC依赖注入 - 组件类库 - JAVA开源项目 - 开源吧

    相关开源项目 Coinjema:Coinjema这个组件通过AspectJ与Groovy提供了一种强大的依赖注入机制.假如你厌烦一大堆XML配置文件,和需要掌握复杂工厂类与容器的时候,这个non-AP ...

最新文章

  1. 洛谷 P1678 烦恼的高考志愿
  2. Java 使用List集合实现图书增删改查
  3. Supervisor监控
  4. 谁能答对这道题?如有兴趣,请留下算法,呵呵~
  5. 多线程的概念及实现方式
  6. 贪心----最优合并问题
  7. 深入理解ButterKnife源码并掌握原理(二)
  8. Linux下LOIC的下载和应用
  9. dosbox运行C语言,[转载]dosbox的使用方法
  10. me909嵌入式linux,linux4.1.4上移植ME909s-821,MU609 4G模块驱动
  11. 二十、融会贯通之全流程操作
  12. 【ML】什么是数据标准化和归一化?应用场景是什么?
  13. 计算机丢失msvc80.dll,msvcr80.dll
  14. Kafka+zookeeper集群搭建
  15. OpenMVG、OpenMVS配置及学习记录(Win10+VS2015)
  16. 使用SpringBoot2.x+Themleaf3.0完成用户登录的开发
  17. 不借助平台怎么开发外贸客户
  18. Atik工业相机应用案例研究——涡轮叶片氧化铝检测成像系统
  19. 聊聊通用会员卡/通用打折卡
  20. Python量化交易03——海龟策略

热门文章

  1. Java面试基础知识(1)
  2. 常用容器(Collection)实现类总结(四)——HashSet
  3. Javascript – 正则表达式
  4. SQL Server 2005/2008 导入导出数据常见报错
  5. Pytorch LSTM实例2
  6. tf.transpose
  7. 到底是32位系统运行快还是64位系统快
  8. 人工智能AI实战100讲(二十)-先拍照后对焦,基于深度估计的景深编辑与背景虚化
  9. java并发问题_并发理论基础:并发问题产生的三大根源
  10. 手机 html 折叠效果,HTML5仿苹果手机的面板合拢折叠效果