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

时间: 2024-11-01 15:54:21

C# MVC IOC、依赖注入的相关文章

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在WebForm页面将主要采用属性注入的方式. 接下来我们正式进入主题,在上一章的基础上我们再添加一个web项目TianYa.DotNetShare.WebDemo,首先看我们的解决方案 本demo的web项目为ASP.NET Web 应用程序(.NET Framework 4.5) 空Web窗体,需要引用

MVC IOC 依赖注入

需要引用如下: IDependencyResolver->System.Web.Mvc.dll IUnityContainer->Microsoft.Practices.Unity.dll Global.asax 追加如下方法 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(

ASP.NET MVC IOC依赖注入之Autofac系列开篇

Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑尽量编写在服务层中,控制器层等不直接调用数据库上下文对象,如此,在一定程度上将各个操作层面区分开,更好的达到解耦的目的. 约定:控制器中不再调用数据库上下文对象,只在服务层中的具体实现调用. Autofac的生命周期可参考博文:https://blog.csdn.net/linshichen/art

MVC Castle依赖注入实现代码

1.MVc 实现依赖注入 public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKernel _kernel; public WindsorControllerFactory(IKernel kernel) { _kernel = kernel; } protected override IController GetControllerInstance(System.Web.Ro

007.ASP.NET MVC控制器依赖注入

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

IoC 依赖注入、以及在Spring中的实现

资源来自网络: 去年火得不行的Spring框架,一般的书籍都会从IoC和AOP开始介绍起,这个IoC概念,个人感觉资料里都写得让人看得有些痛苦,所谓IoC,就是控制反转(Inversion of Control)的缩写,这个大家都知道,但是个人觉得理解这个概念,最好应该从依赖(dependence)开始讲起,以下观点由此展开: UML中依赖关系如A依赖于B,就是A中有对方的引用;也就是说依赖就是引用:A依赖于B,就是A使用B来做事情. 所谓依赖,举个例子说明,一个类Person,另一个类Car,

图解IoC 依赖注入

图解IoC 依赖注入

IoC 依赖注入容器 Unity

原文:IoC 依赖注入容器 Unity IoC 是什么? 在软件工程领域,“控制反转(Inversion of Control,缩写为IoC)”是一种编程技术,表述在面向对象编程中,可描述为在编译时静态分析器并不知道具体被耦合的对象,而该对象是在运行时被对象装配器绑定的. 在传统编程中,决定业务流程的对象是被静态分配的.而在 IoC 中,业务流程取决于对象装配器实例化提供的对象,这使利用抽象来定义对象间的交互成为可能.对象装配器为了能绑定一个对象,要求该对象必须具备兼容的抽象定义.例如类 Cla

Spring-DI控制反转和IOC依赖注入

Spring-DI控制反转和IOC依赖注入 DI控制反转实例 IDEAJ自动导入Spring框架 创建UserDao.java接口 public interface UserDao { public void say(); } 创建UserDaoImpl.java继承UserDao.java并重写say()方法 public class UserDaoImpl implements UserDao{ @Override public void say() { System.out.println

springboot启动流程(九)ioc依赖注入

所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 在前面的几篇文章中,我们多次提到这么一个转化过程: Bean配置 --> BeanDefinition --> Bean对象 Bean的配置可以是xml配置,也可以是java配置.BeanDefinition配置在内存中数据对象,也是Bean的元数据.在springboot启动过程当中,refresh上下文这个步骤将会解析xml配置以及java配置,从而把Bean的配置解析成为Bea