ServicesDAL).AsImplementedInterfaces(); // 特定条件的过滤注册-只注册结尾是

时间:2022-04-28 04:29:50

using Autofac; using Autofac.Integration.Mvc; using Autofac.Integration.WebApi; using AutoFacDal.User; using AutoFacLogic.User; using IAutoFacDal.User; using IAutoFacLogic.User; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace AutoFacWebApi { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); //注册全局过滤器 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AutoFacStart(); } #region 实现依赖注入 /// <summary> /// 使用AutoFac实现依赖注入,, /// </summary> public void AutoFacStart() { var builder = new ContainerBuilder(); SetupResolveRules(builder); //注入 builder.RegisterControllers(Assembly.GetExecutingAssembly()); //注入Controller builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注入APi builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);//注入APi builder.RegisterWebApiModelBinderProvider();//注入APi var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注入Controller var webApiResolver = new AutofacWebApiDependencyResolver(container); //注入APi GlobalConfiguration.Configuration.DependencyResolver = webApiResolver; //注入APi } /// <summary> /// 注入法则 /// </summary> /// <param></param> protected void SetupResolveRules(ContainerBuilder builder) { //UI项目只用引用service和repository的接口,不用引用实现的dll。 //如需加载实现的措施集,将dll拷贝到bin目录下即可,不用引用dll var IServicesBLL = Assembly.Load("IAutoFacLogic"); var ServicesBLL = Assembly.Load("AutoFacLogic"); var IServicesDAL = Assembly.Load("IAutoFacDal"); var ServicesDAL = Assembly.Load("AutoFacDal"); //实现处事接口和处事实现的依赖 业务逻辑层 builder.RegisterAssemblyTypes(IServicesBLL, ServicesBLL).AsImplementedInterfaces(); //实现处事接口和处事实现的依赖 数据层 builder.RegisterAssemblyTypes(IServicesDAL, ServicesDAL).AsImplementedInterfaces(); //特定条件的过滤注册-只注册结尾是User的 //builder.RegisterAssemblyTypes(IServices, Services).Where(t => t.Name.EndsWith("User")).AsImplementedInterfaces(); //使用新的笼罩旧的注册DLL-使用UserNew取代UserOld builder.RegisterType<UserLogic>().As<IUserLogic>(); builder.RegisterType<UserInfoLogic>().As<IUserInfoLogic>(); builder.RegisterType<UserDal>().As<IUserDal>(); } #endregion } }