参考资料:Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac
http://www.cnblogs.com/daisy-popule/p/4126599.html
http://www.tuicool.com/articles/VfIRvq
1>创建Asp.net MVC项目并引入Autofac
如果是web项目就下载这个AutoFac 如果是MCV项目则下载AutoFac asp.net mvc
因为我们这里是MVC项目,所有不需要下这个Autofac 。而是需要下载下面那副图的
AutoFac asp.net mvc 5 Integration
如果是MC项目 这需要下的这个专用于MVC的 AutoFac asp.net mvc
3
4
Global.asax
using Autofac; using Autofac.Integration.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using System.Web.Compilation; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace CMS.MvcUI { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); BuiderIocContainer(); } public static void BuiderIocContainer() { var builder = new ContainerBuilder(); builder.RegisterControllers(System.Reflection.Assembly.GetExecutingAssembly());//注册mvc容器的实现 //如果有web类型,请使用如下获取Assenbly方法(获取所有需要用到的程序集,放到list中) //用GetReferencedAssemblies方法获取当前应用程序下所有的程序集 var assemblys = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList(); builder.RegisterAssemblyTypes(assemblys.ToArray())//查找程序集中以Repository结尾的类型 .Where(t => t.Name.EndsWith("Bll"))//查找所有程序集下面以Bll结尾的类 .AsImplementedInterfaces(); //将找到的类和对应的接口放入IOC容器(放到IOC容器中有什么用处?:) builder.RegisterAssemblyTypes(assemblys.ToArray())//查找程序集中以Dal结尾的类型 .Where(t => t.Name.EndsWith("Dal")) .AsImplementedInterfaces();//表示注册的类型,以接口的方式注册 //builder.RegisterAssemblyTypes(assemblys.ToArray()).AsImplementedInterfaces(); //这样写就将应用程序下所有的类都注册了 //RegisterType表示我要注册什么类型; As<T_UserInfoBll>表示这个类型需要实现什么接口。IT_UserInfoBll就是接口名称 //builder.RegisterType<T_UserInfoBll>().As<IT_UserInfoBll>(); // builder.RegisterType<GmsWorkContext>(); // builder.RegisterType<GmsWorkContext>().PropertiesAutowired(); // builder.RegisterType<UserService>().As<IUserService>(); // builder.RegisterType<EasyAuthorize>().PropertiesAutowired(); var container = builder.Build(); //Build()方法是表示:创建一个容器 //config.DependencyResolver = new AutofacDependencyResolver(container);//注册api容器需要使用HttpConfiguration对象 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注册MVC容器 } } }
Home控制器
using CMS.IDAL; using CMS.Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace CMS.MvcUI.Controllers { using IBLL; public class HomeController : Controller { IT_UserInfoBll _bll; public HomeController(IT_UserInfoBll bll) //使用构造函数实现注入 { _bll = bll; } public ActionResult Index() { return View(); } } }
BaseBll.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CMS.BLL { using IBLL; using IDAL; using System.Linq.Expressions; public class BaseBll<TEntity>:IBaseBll<TEntity> where TEntity:class { protected IBaseDal<TEntity> _ibasedal; //public BaseBll(IBaseDal<TEntity> ibasedal) //{ // _ibasedal = ibasedal; //} public List<TEntity> QueryWhere(Expression<Func<TEntity,bool>> where) { return _ibasedal.QueryWhere(where); } } }
T_UserInfoBll.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CMS.BLL { using Model; using IBLL; using IDAL; public class T_UserInfoBll : BaseBll<T_UserInfo>,IT_UserInfoBll { public IT_UserInfoDal _dal; public T_UserInfoBll(IT_UserInfoDal dal) { _dal = dal; base._ibasedal = dal; } } }
BaseDal.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CMS.DAL { //using Model; using IDAL; using System.Linq.Expressions; public class BaseDal<TEntity>:IBaseDal<TEntity> where TEntity:class { BaseDbContext db = new BaseDbContext(); public List<TEntity> QueryWhere(Expression<Func<TEntity,bool>> where) { return db.Set<TEntity>().Where(where).ToList(); } } }
T_UserInfoDal.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CMS.DAL { using Model; using IDAL; public class T_UserInfoDal:BaseDal<T_UserInfo>,IT_UserInfoDal { } }
BaseDbContext.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CMS.DAL { using System.Data.Entity; public class BaseDbContext:DbContext { public BaseDbContext() : base("salesEntities") { } } }
原文链接:https://www.f2er.com/javaschema/284259.html