using Autofac; using Autofac.Integration.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace FineAdmin.Web { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { RemoveWebFormEngines(); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //´´½¨autofac¹ÜÀí×¢²áÀàµÄÈÝÆ÷ʵÀý var builder = new ContainerBuilder(); SetupResolveRules(builder); //ʹÓÃAutofacÌṩµÄRegisterControllersÀ©Õ¹·½·¨À´¶Ô³ÌÐò¼¯ÖÐËùÓеÄControllerÒ»´ÎÐÔµÄÍê³É×¢²á Ö§³ÖÊôÐÔ×¢Èë builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); // °ÑÈÝÆ÷×°È뵽΢ÈíĬÈϵÄÒÀÀµ×¢ÈëÈÝÆ÷ÖÐ var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } private static void SetupResolveRules(ContainerBuilder builder) { //WebAPIÖ»ÓÃÒýÓÃservicesºÍrepositoryµÄ½Ó¿Ú£¬²»ÓÃÒýÓÃʵÏÖµÄdll¡£ //ÈçÐè¼ÓÔØÊµÏֵijÌÐò¼¯£¬½«dll¿½±´µ½binĿ¼Ï¼´¿É£¬²»ÓÃÒýÓÃdll var iServices = Assembly.Load("FineAdmin.IService"); var services = Assembly.Load("FineAdmin.Service"); var iRepository = Assembly.Load("FineAdmin.IRepository"); var repository = Assembly.Load("FineAdmin.Repository"); //¸ù¾ÝÃû³ÆÔ¼¶¨£¨·þÎñ²ãµÄ½Ó¿ÚºÍʵÏÖ¾ùÒÔServices½á⣩£¬ÊµÏÖ·þÎñ½Ó¿ÚºÍ·þÎñʵÏÖµÄÒÀÀµ builder.RegisterAssemblyTypes(iServices, services) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces().PropertiesAutowired(); //¸ù¾ÝÃû³ÆÔ¼¶¨£¨Êý¾Ý·ÃÎʲãµÄ½Ó¿ÚºÍʵÏÖ¾ùÒÔRepository½á⣩£¬ÊµÏÖÊý¾Ý·ÃÎʽӿںÍÊý¾Ý·ÃÎÊʵÏÖµÄÒÀÀµ builder.RegisterAssemblyTypes(iRepository, repository) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces().PropertiesAutowired(); } /// /// ÒÆ³ýwebformÊÔͼÒýÇæ /// void RemoveWebFormEngines() { var viewEngines = ViewEngines.Engines; var webFormEngines = viewEngines.OfType().FirstOrDefault(); if (webFormEngines != null) { viewEngines.Remove(webFormEngines); } } } }