autofac的使用解析
1:需要添加指定的程序集
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//注意在Application 中就是执行管道事件之前我们需要首先实例化接口对象
namespace itcast.crm17.Site.App_Start
{
using itcast.crm17.common;
using Autofac;
using Autofac.Integration.Mvc; //重写了控制器工厂类,特点扫描有参数的构造函数,再根据此构造函数创建控制器类的对象实例
using System.Reflection;
using System.Web.Mvc;
public class AutoFacConfig
{
public static void Register()
{
//TODO:使用autofanc实现的工厂替换MVC底层默认控制器工厂
//TODO:还用autofac将所有的接口初始化
//1.0 实例化autofac的容器创建者的对象
var bulider = new ContainerBuilder();
//Load:表示的是我们需要实例化其接口对象的程序集名称(命名空间)
bulider.RegisterTypes(Assembly.Load("itcast.crm17.Repository").GetTypes()).AsImplementedInterfaces() ;
bulider.RegisterTypes(Assembly.Load("itcast.crm17.Services").GetTypes()).AsImplementedInterfaces();
//4.0 告诉autofac将来创建控制器类对象的程序集名称为什么
Assembly ass = Assembly.Load("itcast.crm17.Site");
bulider.RegisterControllers(ass);
//5.0 告诉auto发出容器创建者创建一个auto的正真容器对象
var container = bulider.Build();
//6:将当前的autofac容器对象追加进全局缓存中 用于我们创建接口实例对象的时候可以拿出来
CacheMgr.SetData(Keys.autofaccontainer, container);
//6.0 告诉MVC将DefaultControllerFactory替换成autofac中的控制器创建工厂
//将来所有的接口使用container去进行传递
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
}
浙公网安备 33010602011771号