IOCService.cs 2.7 KB

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