02: ASP.NET MVC会计教学管理端项目系列–三层+MVVM搭建
autofac批量注入
Autofac是一种IOC容器,那么什么是IOC容器呢?
先说一下两个概念IOC和DI,我的理解:
① IOC:调用者不再创建(不自己new)被调用者的实例,而是交给容器去创建(AutoFac就充当这里的容器),这就是控制反转。
② DI:容器创建好的实例再注入调用者的过程,就是依赖注入(比如:属性注入、构造函数注入等)。
Nuget包安装
在web层引用添加nuget包,
注入配置
在App_Start创建类文件AutofacConfig.cs
代码如下:
public class AutofacConfig
{
/// <summary>
/// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建
/// </summary>
public static void Register()
{
//实例化一个autofac的创建容器
var builder = new ContainerBuilder();
//告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (SuFeng.Account.Web)
Assembly controllerAssembly = Assembly.Load("SuFeng.Account.Web");
builder.RegisterControllers(controllerAssembly);
//告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例
Assembly repositoryAssembly = Assembly.Load("SuFeng.Account.Repository");
//创建repositoryAssembly中的所有类的instance以此类的实现接口存储
builder.RegisterTypes(repositoryAssembly.GetTypes()).AsImplementedInterfaces();
//告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例
Assembly serviceAssembly = Assembly.Load("SuFeng.Account.Service");
//创建serviceAssembly中的所有类的instance以此类的实现接口存储
builder.RegisterTypes(serviceAssembly.GetTypes()).AsImplementedInterfaces();
//创建一个Autofac的容器
var container = builder.Build();
//将MVC的控制器对象实例 交由autofac来创建
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
全局配置
在全局Global.asax类Application_Start()方法中调用AutofacConfig配置类方法
代码如下:
AutofacConfig.Register();