分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

AutoFac在MVC中的使用

发布时间:2023-09-06 02:22责任编辑:蔡小小关键词:MVC

在asp.net mvc控制器中使用Autofac来解析依赖

如下Controller中使用构造函数依赖注入接口IUserService:

 ?public IUserService _IUserService; ???????public HomeController(IUserService IUserService) ???????{ ???????????_IUserService = IUserService; ???????}

如何使用AutoFac如下:

1、首先引用AutoFac包

 同时也要看一下你的EF版本是多少的,否则会报无法加载“EntityFromwork” 之类的错误

如果是EF是6.0那么还需要引用一个文件,如下:

如果是其他版本的相应的引用AutoFac.MVC3、AutoFac.MVC4

1、在App_Start创建类文件AutofacConfig.cs

引用命名空间:

using Autofac;using Autofac.Integration.Mvc;

以下为单个注册方法:

//创建autofac管理注册类的容器实例 ?var builder = new ContainerBuilder();//下面就需要为这个容器注册它可以管理的类型//builder的Register方法可以通过多种方式注册类型,之前在控制台程序里面也演示了好几种方式了。 ?builder.RegisterType<UserService>().As<IUserService>();//builder.RegisterType<DefaultController>().InstancePerDependency();//使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册 ?builder.RegisterControllers(Assembly.GetExecutingAssembly());
//生成具体的实例 ?var container = builder.Build();//下面就是使用MVC的扩展 更改了MVC中的注入方式. ?DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

以下为批量注册方法:

namespace AutoFacConfigure.App_Start{ ???public class AutofacConfig ???{ ???????/// <summary> ???????/// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建 ???????/// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作 ???????/// </summary> ???????public static void Register() ???????{ ???????????//实例化一个autofac的创建容器 ???????????var builder = new ContainerBuilder(); ???????????//告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (WebUI) ???????????Assembly controllerAss = Assembly.Load("AutoFacConfigure"); ???????????builder.RegisterControllers(controllerAss); ???????????//告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例(数据操作层) ???????????Assembly respAss = Assembly.Load("AutoFacConfigure.Respoisty"); ???????????//创建respAss中的所有类的instance以此类的实现接口存储 ???????????builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces(); ???????????//告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例(业务逻辑层) ???????????Assembly serpAss = Assembly.Load("AutoFacConfigure.Service"); ???????????//创建serAss中的所有类的instance以此类的实现接口存储 ???????????builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces(); ???????????// builder.RegisterType<>().As<>(); ???????????//创建一个Autofac的容器 ???????????var container = builder.Build(); ???????????//将MVC的控制器对象实例 交由autofac来创建 ???????????DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); ???????} ???}}

 2、在全局Global.asax类Application_Start()方法中调用AutofacConfig配置类方法

   protected void Application_Start(object sender, EventArgs e) ????{ ???????AutofacConfig.Register(); ????}

3、Web Api配置Autofac方法

引用

using Autofac.Integration.WebApi;

参考资料:http://docs.autofac.org/en/latest/integration/webapi.html

var builder = new ContainerBuilder(); ?// Get your HttpConfiguration. ?var config = GlobalConfiguration.Configuration; ?// Register your Web API controllers. ?builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); ?// OPTIONAL: Register the Autofac filter provider. ?builder.RegisterWebApiFilterProvider(config); ?// Set the dependency resolver to be Autofac. ?var container = builder.Build(); ?config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

AutoFac在MVC中的使用

原文地址:https://www.cnblogs.com/youmingkuang/p/9946113.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved