123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using Autofac;
- using Autofac.Core;
- using Autofac.Integration.Mvc;
- using Autofac.Integration.WebApi;
- using CB.Cache;
- using CB.Cache.WebCache;
- using Data.Dapper;
- using Data.Interfaces;
- using Owin;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Web;
- using System.Web.Http;
- using System.Web.Mvc;
- namespace UC.Api
- {
- public class AutoFacBootStrapper
- {
- public static void AutoFacInit()
- {
- var builder = new ContainerBuilder();
- HttpConfiguration config = GlobalConfiguration.Configuration;
- SetupResolveRules(builder);
- //注册Commonc层
- builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).PropertiesAutowired();
- ////注册所有的Controllers
- builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
- //注册所有的ApiControllers
- builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
- // 可选:在视图页面中启用属性注入。
- builder.RegisterSource(new ViewRegistrationSource());
- // 注册所有的Attribute
- builder.RegisterFilterProvider();
- var container = builder.Build();
- //注册api容器需要使用HttpConfiguration对象
- config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
- //注册Mvc容器
- DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
- }
- private static void SetupResolveRules(ContainerBuilder builder)
- {
- //var controllerAssmbly = Assembly.Load("UC.Api");
- //builder.RegisterApiControllers(controllerAssmbly);
- //WebAPI只用引用services和repository的接口,不用引用实现的dll。
- //如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
- var dal = Assembly.Load("UC.DAL");
- var bll = Assembly.Load("UC.BLL");
- var data = Assembly.Load("Data.Dapper");
- var idata = Assembly.Load("Data.Interfaces");
- var cache = Assembly.Load("Data.Cache");
- //根据名称约定(服务层的接口和实现均以Services结尾),实现服务接口和服务实现的依赖
- builder.RegisterAssemblyTypes(bll, bll)
- .Where(t => t.Name.EndsWith("BLL"))
- .AsImplementedInterfaces().PropertiesAutowired();
- //根据名称约定(服务层的接口和实现均以Services结尾),实现服务接口和服务实现的依赖
- builder.RegisterTypes(dal.GetTypes())
- .Where(a => a.Name.Contains("DAL"))
- .AsImplementedInterfaces().PropertiesAutowired(); ;
- //数据库注册
- builder.RegisterAssemblyTypes(idata, data)
- .Where(t => t.Name.EndsWith("Database"))
- .AsImplementedInterfaces().PropertiesAutowired();
- //缓存注册
- builder.RegisterType<WebCache>().As<ICache>()
- .AsImplementedInterfaces().PropertiesAutowired();
- ////根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
- //builder.RegisterAssemblyTypes(iRepository, repository)
- // .Where(t => t.Name.EndsWith("Repository"))
- // .AsImplementedInterfaces();
- }
- }
- }
|