IOCService.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Autofac;
  2. using Autofac.Integration.WebApi;
  3. using Central.Control.WebApi.Service.Interface;
  4. using IoC;
  5. using Microsoft.Extensions.Caching.Memory;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Reflection;
  11. using System.Web;
  12. using System.Web.Http;
  13. using IContainer = Autofac.IContainer;
  14. namespace Central.Control.WebApi.IOC
  15. {
  16. /// <summary>
  17. ///
  18. /// </summary>
  19. public class IOCService
  20. {
  21. private static IContainer _container;
  22. /// <summary>
  23. ///
  24. /// </summary>
  25. public static void InitAutofac()
  26. {
  27. #region AutoFac IOC容器
  28. var builder = new ContainerBuilder();
  29. try
  30. {
  31. //builder.RegisterControllers(Assembly.GetCallingAssembly()); //注册mvc控制器 需要引用package Autofac.Mvc
  32. //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); //支持Api控制器属性注入
  33. builder.RegisterApiControllers(Assembly.GetCallingAssembly()); //注册所有api控制器 构造函数注入 需要引用package Autofac.WebApi
  34. //注册程序集
  35. #region Service
  36. var assemblysServices = Assembly.Load("Central.Control.WebApi");
  37. builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces().InstancePerDependency();
  38. #endregion
  39. #region Repository
  40. //var assemblysRepository = Assembly.Load("WebApi.Repository");
  41. //builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency();
  42. #endregion
  43. //For<IDbContext>().Use(x => new Context());
  44. //builder.RegisterType<Context>()
  45. // .AsImplementedInterfaces()
  46. // .InstancePerLifetimeScope();
  47. _container = builder.Build(); //创建依赖注入
  48. //设置MVC依赖注入
  49. //DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));
  50. //设置WebApi依赖注入
  51. GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(_container);
  52. }
  53. catch (Exception ex)
  54. {
  55. throw new Exception(ex.Message + "\n" + ex.InnerException);
  56. }
  57. #endregion
  58. }
  59. /// <summary>
  60. /// 从Autofac容器获取对象
  61. /// </summary>
  62. /// <typeparam name="T"></typeparam>
  63. /// <returns></returns>
  64. public static T GetFromFac<T>()
  65. {
  66. return _container.Resolve<T>();
  67. }
  68. }
  69. }