using Autofac;
using Autofac.Integration.WebApi;
using Central.Control.WebApi.Service.Interface;
using IoC;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;
using IContainer = Autofac.IContainer;

namespace Central.Control.WebApi.IOC
{
    /// <summary>
    /// 
    /// </summary>
    public class IOCService
    {
        private static IContainer _container;

        /// <summary>
        /// 
        /// </summary>
        public static void InitAutofac()
        {
            #region AutoFac IOC容器

            var builder = new ContainerBuilder();

            try
            {
                //builder.RegisterControllers(Assembly.GetCallingAssembly());  //注册mvc控制器  需要引用package Autofac.Mvc

                //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();  //支持Api控制器属性注入
                builder.RegisterApiControllers(Assembly.GetCallingAssembly());  //注册所有api控制器  构造函数注入  需要引用package Autofac.WebApi

                //注册程序集

                #region Service
                var assemblysServices = Assembly.Load("Central.Control.WebApi");
                builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces().InstancePerDependency();

                #endregion


                #region Repository
                //var assemblysRepository = Assembly.Load("WebApi.Repository");
                //builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency();

                #endregion

                //For<IDbContext>().Use(x => new Context());
                //builder.RegisterType<Context>()
                //      .AsImplementedInterfaces()
                //      .InstancePerLifetimeScope();


                _container = builder.Build();   //创建依赖注入


                //设置MVC依赖注入
                //DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));

                //设置WebApi依赖注入
                GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(_container);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + "\n" + ex.InnerException);
            }

            #endregion
        }

        /// <summary>
        /// 从Autofac容器获取对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T GetFromFac<T>()
        {
            return _container.Resolve<T>();
        }


    }
}