第一步:添加引用
在运行程序下引用AutoFac,通过NuGet导入包. 此处注意:根据项目结构使用AutoFac,如:mvc 应使用AutoFac.Mvc
第二步:在运行程序下添加一个类,mvc应添加在App_Start文件夹中. 并创建一个静态方法,例:
public static void getInstance() {
var container = new ContainerBuilder();
//此处写法为注入接口写法,其余写法可自行百度
container.RegisterType<SupplierInfoBLL>().AsImplementedInterfaces();
container.RegisterType<SupplierTypeBLL>().AsImplementedInterfaces();
//此处为Bll层的AutoFacModule调用,newBllModule为bll层类,为解决调用Dal的解耦依赖
container.RegisterModule(newBllModule());
//此句必须在下句之上
container.RegisterControllers(Assembly.GetExecutingAssembly());
var bulid = container.Build();
//此句必须在上句之下
DependencyResolver.SetResolver(new AutofacDependencyResolver(bulid));
}
第三步:在BLL层,Dal层分别添加一个Module类
//BLL层 创建一个类继承自Module,并重写Load方法
protected override void Load(ContainerBuilder builder){
builder.RegisterType<SupplierInfoDAL>().AsImplementedInterfaces().InstancePerLifetimeScope();
builder.RegisterType<SupplierTypeDAL>().AsImplementedInterfaces().InstancePerLifetimeScope();
//此处调用Dal中Module
builder.RegisterModule(new AutoFacDalModule());
}
//DAL层 创建一个类继承自Module,并重写Load方法
protected override void Load(ContainerBuilder builder){
//此处DBContext 为数据上下文对象; 此处写法为注入类写法
builder.RegisterType<DBContext>();
}
第四步:修改项目中对bll,dal,db数据上下文对象的使用
//UI层,调用BLL层修改
private readonly IBLL<DTOSupplierInfo> _supplierInfoBll;
private readonly IBLL<DTOSupplierType> _supplierTypeBll;
public SupplierExtjsController(IBLL<DTOSupplierInfo> supplierInfoBll, IBLL<DTOSupplierType> supplierTypeBll){
_supplierInfoBll = supplierInfoBll;
_supplierTypeBll = supplierTypeBll;
}
//BLL层,调用DAL层修改
//SupplierInfoBLL
private readonly IDAL<SupplierInfo> _supplierInfoDal;
public SupplierInfoBLL(IDAL<SupplierInfo> supplierInfoDal){
_supplierInfoDal = supplierInfoDal;
}
//SupplierTypeBLL
private readonly IDAL<SupplierType> _suppliertypeDal;
public SupplierTypeBLL(IDAL<SupplierType> supplierTypeDal){
_suppliertypeDal = supplierTypeDal;
}
//DAL层,调用DB对象修改
//SupplierInfoDAL
private readonly DBContext _dbContext;
public SupplierInfoDAL(DBContext dbContext){
_dbContext = dbContext;
}
//SupplierTypeDAL
private readonly DBContext _dbContext;
public SupplierTypeDAL(DBContext dbContext){
_dbContext = dbContext;
}
AutoFacConfig.getInstance(); //AutoFacConfig为第二步中定义的类,getInstance为;类中放置配置的方法
(该例子所用项目为工厂模式项目)
注:反射类(例:AutuFacConfig类)必须定义在controller所在项目下