Nop引擎是为了将整个框架的核心与业务逻辑进行低耦合而设计的单实例对象。
Nop引擎是IOC的管理者,主要将IOC的依赖查找和依赖注册简化,将内部功能封装在Nop引擎中,只对外开放依赖查找功能,在框架中提供依赖注册接口,实现IOC的注册和查找分离,方便使用。
主要对象
IEngine 引擎接口,定义引擎的功能(组件和插件初始化、包装后的IOC容器、依赖查找)
NopEngine 实现IEngine,实现了AutofacIoc组件实现控制反转。
EngineContext 引擎环境,Nop引擎的初始化工作和用于向外部开放Nop引擎的单实例访问。
Nop将IOC的依赖查找封装起来,并把依赖注册的抽象化(定义注册接口)
主要对象
IDependencyRegistrar 依赖注册接口(抽象化依赖注册)
ContainerManager IOC容器管理器(封装IOC容器,提供组件注册和依赖查找)
ContainerConfigurer IOC容器配置器(Nop框架初始IOC组件注册)
AutofacRequestLifetimeHttpModule 创建ILifetimeScope,ILifetimeScope是IOC依赖查找的关键对象
ComponentLifeStyle 组件生命周期(临时、单例、终生周期)
业务流程
系统启动
EngineContext初始化
NopEngine初始化
ContianerConfigurer初始化
向IOC注册NopConfig、NopEngine和ContianerConfigurer实例。
向IOC注册TypeFinder实例
通过TypeFinder对找系统中所有的依赖注册(IDependencyRegistrar),并注册到IOC中。
启动任务初始化
AutoMap映射
EF数据库设置验证
Nop基础数据初始化
DependencyResolver设置(服务和依赖解析方法)
附:Ioc与WebApi
1、需通过Nuget安装Autofac.WebApi2包,后自动引用Autofac.Integration.WebApi程序集
2、注册Api依赖关系解析程序(GlobalConfiguration.Configuration.DependencyResolver)
3、注册ApiControllers(IHttpController)程序集。
另附:
几年前自己写了一个Autofac.Engine,应用比较简单。可以应用于 Web.和WebApi,而且源码不依赖 System.Net.Http等资源。已经在自己写的框架里应用了好几年。现在稳定运行10+个项目,提供大家参考,点评:
https://www.nuget.org/packages/Autofac.Engine/
http://git.oschina.net/Lycan80/Autofac.Engine
老早就想做一个开源的项目管理系统,正在筹划中吧(前端达不到自己理想的效果,在努力)。