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);
}
}
}
}