Autofac配置

  1. using Autofac;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Web;
  7. using System.Web.Http;
  8. using Autofac.Integration.Mvc;
  9. using Autofac.Integration.WebApi;
  10.  
  11. namespace WebAutoFac
  12. {
  13. /// <summary>
  14. /// Autofac配置
  15. /// </summary>
  16. public class AutoFacBootStrapper
  17. {
  18. /// <summary>
  19. /// Autofac配置
  20. /// </summary>
  21. public static void CoreAutoFacInit()
  22. {
  23. #region MVC---install-package autofac.mvc5 注意版本
  24.  
  25. //var builder = new ContainerBuilder();
  26.  
  27. //SetupResolveRules(builder);
  28.  
  29. ////注册所有的Controllers
  30. //builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
  31. //var container = builder.Build();
  32. //System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  33.  
  34. #endregion
  35.  
  36. #region Webapi和MVC ---install-package autofac.mvc5 install-package autofac.webapi2 注意版本
  37.  
  38. var builder = new ContainerBuilder();
  39. SetupResolveRules(builder);
  40.  
  41. //注册所有的Controllers
  42. builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
  43. //注册所有的ApiControllers
  44. builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
  45.  
  46. var container = builder.Build();
  47. //注册所有的Controllers
  48. builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
  49. //注册api容器需要使用HttpConfiguration对象
  50. HttpConfiguration config = GlobalConfiguration.Configuration;
  51. config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
  52. System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  53.  
  54. #endregion
  55.  
  56. #region 自动注入 --- 注释
  57.  
  58. ////创建autofac管理注册类的容器实例
  59. //var builder = new ContainerBuilder();
  60. //HttpConfiguration config = GlobalConfiguration.Configuration;
  61. //Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
  62. ////注册所有实现了 IDependency 接口的类型
  63. //Type baseType = typeof(IDependency);
  64. //builder.RegisterAssemblyTypes(assemblies)
  65. // .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
  66. // .AsSelf().AsImplementedInterfaces()
  67. // .PropertiesAutowired().InstancePerLifetimeScope();
  68. ////注册MVC类型
  69. //// builder.RegisterControllers(assemblies).PropertiesAutowired();
  70. ////注册Api类型
  71. //builder.RegisterApiControllers(assemblies).PropertiesAutowired();
  72. ////builder.RegisterFilterProvider();
  73. //builder.RegisterWebApiFilterProvider(config);
  74. //var container = builder.Build();
  75. ////注册api容器需要使用HttpConfiguration对象
  76. //config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
  77. ////注册解析
  78. //DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  79.  
  80. #endregion
  81.  
  82. //有了 IDependency 这个基接口,我们只需要 Global 中很简单的几行代码,就可以完成整个系统的依赖注入匹配
  83. //ContainerBuilder builder = new ContainerBuilder();
  84. //builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>));
  85. //Type baseType = typeof(IDependency);
  86.  
  87. //// 获取所有相关类库的程序集
  88. //Assembly[] assemblies = ...
  89.  
  90. //builder.RegisterAssemblyTypes(assemblies)
  91. // .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
  92. // .AsImplementedInterfaces().InstancePerLifetimeScope();//InstancePerLifetimeScope 保证对象生命周期基于请求
  93. //IContainer container = builder.Build();
  94. //DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  95. }
  96.  
  97. private static void SetupResolveRules(ContainerBuilder builder)
  98. {
  99. //WebAPI只用引用services和repository的接口,不用引用实现的dll。
  100. //如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
  101. var iServices = Assembly.Load("IBLL");
  102. var services = Assembly.Load("BLL");
  103. //var iRepository = Assembly.Load("WebAPI.IRepository");
  104. //var repository = Assembly.Load("WebAPI.Repository");
  105.  
  106. //根据名称约定(服务层的接口和实现均以Services结尾),实现服务接口和服务实现的依赖
  107. builder.RegisterAssemblyTypes(iServices, services)
  108. .Where(t => t.Name.EndsWith("BLL"))
  109. .AsImplementedInterfaces();
  110.  
  111. ////根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
  112. //builder.RegisterAssemblyTypes(iRepository, repository)
  113. // .Where(t => t.Name.EndsWith("Repository"))
  114. // .AsImplementedInterfaces();
  115.  
  116. //var cont = Assembly.Load("WebAutoFac");
  117. ////根据名称约定(服务层的接口和实现均以Services结尾),实现服务接口和服务实现的依赖
  118. //builder.RegisterAssemblyTypes(cont)
  119. // .Where(t => t.Name.EndsWith("Controller"))
  120. // .AsImplementedInterfaces();
  121.  
  122. ////使用新的覆盖旧的注册DLL-使用UserNew代替UserOld
  123. //builder.RegisterType<BLL.UserBLL>().As<IBLL.IUserBLL>();
  124.  
  125. }
  126. }
  127. }
  1. using Autofac;
  2. using BLL;
  3. using IBLL;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Net.Http;
  9. using System.Reflection;
  10. using System.Web.Http;
  11.  
  12. namespace WebAutoFac.Controllers
  13. {
  14. /// <summary>
  15. ///
  16. /// </summary>
  17. [RoutePrefix("User")]
  18. public class UserController : ApiController
  19. {
  20. private IUserBLL _userBll;
  21. private IPeopleBLL _peopleBll;
  22.  
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. /// <param name="userBLL"></param>
  27. /// <param name="peopleBll"></param>
  28. public UserController(IUserBLL userBLL, IPeopleBLL peopleBll)
  29. {
  30. _userBll = userBLL;
  31. _peopleBll = peopleBll;
  32. }
  33. /// <summary>
  34. /// 最原始的方式直接new(需添加对BLL层的引用)
  35. /// </summary>
  36. /// <returns></returns>
  37. [HttpGet,Route("Refernce")]
  38. public string GetUserInfoByRefernce()
  39. {
  40. UserBLL userBll = new UserBLL();
  41. var result = userBll.GetUserInfor();
  42. return result;
  43. }
  44.  
  45. /// <summary>
  46. /// 面向接口编程(仍需添加对BLL层的引用)
  47. /// </summary>
  48. /// <returns></returns>
  49. [HttpGet, Route("Interface")]
  50. public string GetUserInfoByInterface()
  51. {
  52. IUserBLL userBll = new UserBLL();
  53. var result = userBll.GetUserInfor();
  54. return result;
  55. }
  56. /// <summary>
  57. /// 接口+反射(只需将BLL层的程序集拷贝进来)
  58. /// </summary>
  59. /// <returns></returns>
  60. [HttpGet, Route("Reflection")]
  61. public string GetUserInfoByReflection()
  62. {
  63. Assembly ass = Assembly.Load("BLL.dll");
  64. Type type = ass.GetType("BLL.UserBLL");
  65. //调用默认的无参构造函数进行对象的创建
  66. object myUserBll = Activator.CreateInstance(type);
  67. IUserBLL userBll = myUserBll as IUserBLL;
  68. var result = userBll.GetUserInfor();
  69. return result;
  70. }
  71.  
  72. /// <summary>
  73. /// 测试AUTOFAC
  74. /// </summary>
  75. /// <returns></returns>
  76. [HttpGet, Route("testAutofac")]
  77. public string Test()
  78. {
  79. //IUserBLL userBLL = System.Web.Mvc.DependencyResolver.Current.GetService<IUserBLL>();
  80. var builder = new ContainerBuilder();
  81. builder.RegisterType<UserBLL>().As<IUserBLL>();
  82. var container = builder.Build().BeginLifetimeScope();
  83. var userBll = container.Resolve<IUserBLL>();
  84. var result = userBll.GetUserInfor("Autofac");
  85. return result;
  86. //var result = _userBLL.GetUserInfor("Autofac");
  87. //return result;
  88. }
  89.  
  90. /// <summary>
  91. ///
  92. /// </summary>
  93. /// <returns></returns>
  94. [HttpGet, Route("Assembly")]
  95. public string GetUserInfo()
  96. {
  97. //1、使用nupkg引用Autofac,Autofac.Mvc5和Autofac.Webapi2
  98. //PM > install-package autofac - version 3.5.0
  99. //PM > install-package autofac.mvc5
  100. //PM > install-package autofac.webapi2
  101. //(注意:您的项目中如果使用的是webapi2,此处必须为webapi2而不是webapi,
  102. //否则在运行时将出现“重写成员“Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()”时违反了继承安全性规则。
  103. //重写方法的安全可访问性必须与所重写方法的安全可访问性匹配。”错误。) mvc同样
  104. string strUserInfo = _userBll.GetUserInfor("user-Assembly");
  105. string strPeople = _peopleBll.Introduce("people-Assembly");
  106. string result = strUserInfo + "," + strPeople;
  107. return result;
  108. }
  109.  
  110. // GET api/<controller>
  111. public IEnumerable<string> Get()
  112. {
  113. return new string[] { "value1", "value2" };
  114. }
  115.  
  116. // GET api/<controller>/5
  117. public string Get(int id)
  118. {
  119. return "value";
  120. }
  121.  
  122. // POST api/<controller>
  123. public void Post([FromBody]string value)
  124. {
  125. }
  126.  
  127. // PUT api/<controller>/5
  128. public void Put(int id, [FromBody]string value)
  129. {
  130. }
  131.  
  132. // DELETE api/<controller>/5
  133. public void Delete(int id)
  134. {
  135. }
  136. }
  137. }

UserController

netcore;

  1. //DI了AutoMapper中需要用到的服务,其中包括AutoMapper的配置类 Profile
  2. services.AddAutoMapper();
  3. var builder = new ContainerBuilder();
  4. builder.Populate(services);
  5. builder.RegisterAssemblyTypes(typeof(ManagerRoleRepository).Assembly)
  6. .Where(t => t.Name.EndsWith("Repository"))
  7. .AsImplementedInterfaces();
  8. builder.RegisterAssemblyTypes(typeof(ManagerRoleService).Assembly)
  9. .Where(t => t.Name.EndsWith("Service"))
  10. .AsImplementedInterfaces();
  11. return new AutofacServiceProvider(builder.Build());
  12. }

netcore 配置

  1. public IServiceProvider ConfigureServices(IServiceCollection services)
  2.         { 
  3.             services.AddMvc();
  4.             var builder = new ContainerBuilder();//实例化 AutoFac  容器   
  5.               
  6.             var assemblys = Assembly.Load("Service");//Service是继承接口的实现方法类库名称
  7.             var baseType = typeof(IDependency);//IDependency 是一个接口(所有要实现依赖注入的借口都要继承该接口)
  8.             builder.RegisterAssemblyTypes(assemblys)
  9.              .Where(m => baseType.IsAssignableFrom(m) && m != baseType)
  10.              .AsImplementedInterfaces().InstancePerLifetimeScope();
  11.  
  12.             builder.Populate(services);
  13.             ApplicationContainer = builder.Build();
  14.             return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管 core内置DI容器
  15.  
  16.         }
  17.  
  18. ConfigureServices方法由void改为返回IServiceProvider

https://www.cnblogs.com/shacoli/p/8523866.html

https://www.cnblogs.com/xujie520/p/5200815.html

https://www.cnblogs.com/yanweidie/p/autofac.html

https://www.cnblogs.com/lenmom/p/9081658.html

https://blog.csdn.net/ad996454914/article/details/80901105

https://www.cnblogs.com/yanweidie/p/autofac.html

Autofac +webapi 配置的更多相关文章

  1. Autofac 及 Autofac.WebApi 与MVC版本兼容问题

    环境:vs2013 下载 Autofac 时,会自动把 Microsoft.AspNet.Mvc 更新到 5.2.3.原来是 5.0.0.0 再使用 Autofac.WebApi , 出现以下问题: ...

  2. Asp.Net WebAPI配置接口返回数据类型为Json格式

    Asp.Net WebAPI配置接口返回数据类型为Json格式   一.默认情况下WebApi 对于没有指定请求数据类型类型的请求,返回数据类型为Xml格式 例如:从浏览器直接输入地址,或者默认的XM ...

  3. .net core webapi 配置swagger调试界面

    一.创建一个.net core webapi的项目: 二.在nuget程序包管理器控制台输入  Install-Package Swashbuckle -version 6.0.0-beta902   ...

  4. Asp.net WebApi 配置 Swagger UI

    首先安装Swashbuckle.Core 然后添加swagger配置文件. [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), &q ...

  5. Autofac通过配置的方式

    autofac是比较简单易用的IOC容器.下面我们展示如何通过json配置文件,来进行控制反转. 需要用到以下程序集.可以通过nugget分别安装 Microsoft.Extensions.Confi ...

  6. Asp.net Mvc、webApi配置允许跨域

    Web.config 下<system.webServer> 节点下配置 <httpProtocol> <customHeaders> <add name=& ...

  7. C# WebApi 配置复杂路由不生效的问题

    配置复杂路由不生效是由于优先级的关系,应该把默认路由放在最后. config.Routes.MapHttpRoute( name: "DynamicApi", routeTempl ...

  8. asp.net core webapi 配置跨域处理

    在Startup.cs文件中的ConfigureServices方法中加入如下代码: //配置跨域处理 services.AddCors(options => { options.AddPoli ...

  9. webapi框架搭建-依赖注入之autofac

    前言 c#的依赖注入框架有unity.autofac,两个博主都用过,感觉unity比较简单而autofac的功能相对更丰富(自然也更复杂一点),本篇将基于前几篇已经创建好的webapi项目,引入au ...

随机推荐

  1. IIS7 配置ssl证书 多域名绑定443端口

    IIS7下多个子域名同时配置https协议,但IIS7默认支持单个443端口造成端口冲突: 解决方案:先把每个域名配置不同的端口 例:444,445,446等 然后在:C:\Windows\syste ...

  2. Navicat for MySQL打开链接时出错错误为:2005 - Unknown MySQL server host 'localhost'(0)?

    问题:Navicat for MySQL打开链接时出错错误为:2005 - Unknown MySQL server host 'localhost'(0)? 在使用navicat 连接mysql数据 ...

  3. pageadmin CMS Sql新建数据库和用户名教程

    用pageadmin网站制作如何Sql新建数据库和用户名 sql server软件安装完毕后,需要新建一个数据库用来作为网站的数据库. 1.打开sql管理界面,如图所示,找到数据库,右键单击数据库,选 ...

  4. nowcoder(牛客网)OI测试赛3 解题报告

    昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...

  5. Java之static静态代码块

    Java之static静态代码块 构造代码块 使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域 public cl ...

  6. leecode刷题(13) -- 字符串中的第一个唯一字符

    leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...

  7. [ActionScript 3.0] 正则表达式

    正则表达式: 正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上,于1956提出来的.具有完整语法的正则表达式,主要使用在字符串的格式的匹配方面上,后来也逐渐应用到 ...

  8. jxl读取excel

    String path=""; String path2=""; File file = new File(path); File file2 = new Fi ...

  9. vue中vueRouter使用

    首先需要安装依赖:

  10. Jmeter打开url时提示“请在微信客户端打开链接问题”

    前提: 1.HTTP信息头管理器已添加了“User-Agent” 2.工作台添加HTTP代理服务器(注意端口和客户端填写的代理端口要一致) 但是运行的时候总是提示“请在微信客户端打开链接” 查阅各种资 ...