usingAutofac;usingAutofac.Integration.Mvc;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Reflection;usingSystem.Web;usingSystem.Web.Mvc;usingSystem.Web.Optimization;usingSystem.Web.Routing;namespaceEFAutofacMVC
{public classMvcApplication : System.Web.HttpApplication
{protected voidApplication_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);#region 自动注入
//创建autofac管理注册类的容器实例
var builder = newContainerBuilder();
Assembly[] assemblies= Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();//注册所有实现了 IDependency 接口的类型
Type baseType = typeof(IDependency);
builder.RegisterAssemblyTypes(assemblies)
.Where(type=> baseType.IsAssignableFrom(type) && !type.IsAbstract)
.AsSelf().AsImplementedInterfaces()
.PropertiesAutowired().InstancePerLifetimeScope();//注册MVC类型
builder.RegisterControllers(assemblies).PropertiesAutowired();
builder.RegisterFilterProvider();var container =builder.Build();
DependencyResolver.SetResolver(newAutofacDependencyResolver(container));#endregion
#region 手动一个一个的进行注入
// //创建autofac管理注册类的容器实例//var builder = new ContainerBuilder();// //为这个容器注册它可以管理的类型// //builder的Register方法可以通过多种方式注册类型。//builder.RegisterType().As();// //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册//builder.RegisterControllers(Assembly.GetExecutingAssembly());//生成具体的实例// //如果使用属性注入 就把上面这句改为
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); // 这样支持属性注入
//var container = builder.Build();// //下面就是使用MVC的扩展 更改了MVC中的注入方式.//DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
#endregion}
}
}