一、手工搭建平台
1.创建项目
Install-Package Newtonsoft.Json -Version 8.0.3 Install-Package Castle.Windsor -Version 3.3.0
2.创建WebModule类
namespace ZmBlog.Web.App_Start { [DependsOn(typeof(AbpWebMvcModule))] public class ZmBlogWebModule:AbpModule { public override void PreInitialize() { //依赖注入注册之前,主要用于初始化默认的配置 //开启本地化语言、配置等Hangfire //关闭多租户、审计日志、AntiForgery等 } public override void Initialize() { //该方法通常是依赖注入注册的地方 IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); AreaRegistration.RegisterAllAreas(); //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } public override void PostInitialize() { //依赖注入注册之后调用,在这里可以安全地解析一个依赖 } public override void Shutdown() { //在应用关闭的时候调用 } } }
3.配置Global.asax
public class MvcApplication : AbpWebApplication { protected override void Application_Start(object sender, EventArgs e) { base.Application_Start(sender, e); } }
4.修改默认控制器
二、初始化过程
public abstract class AbpWebApplication : HttpApplication { protected virtual void Application_Start(object sender, EventArgs e) { ThreadCultureSanitizer.Sanitize(); //设置当前线程的区域性 AbpBootstrapper.IocManager.RegisterIfNot<IAssemblyFinder, WebAssemblyFinder>();//加载bin目录下的所有dll并注册 AbpBootstrapper.Initialize(); } }
3.关于AbpBootstrapper的Initialize()方法
public virtual void Initialize() { IocManager.IocContainer.Install(new AbpCoreInstaller());//注册系统框架级的所有配置类 IocManager.Resolve<AbpStartupConfiguration>().Initialize();//实例化配置类 _moduleManager = IocManager.Resolve<IAbpModuleManager>(); _moduleManager.InitializeModules(); }
4. IAbpModuleManager的实例调用其InitializeModules()初始化所有的Module
public virtual void InitializeModules() { LoadAll(); var sortedModules = _modules.GetSortedModuleListByDependency(); sortedModules.ForEach(module => module.Instance.PreInitialize());//先完成所有Module的PreInitialize sortedModules.ForEach(module => module.Instance.Initialize());//再执行所有Module的Initialize sortedModules.ForEach(module => module.Instance.PostInitialize());//最后执行PostInitialize }
另外,AbpModule的基本信息是用AbpModuleInfo封装的,将一个abpmodule类封装成Type,Assembly以及模块的依赖模块的AbpModuleInfo等信息。
public virtual void ShutdownModules() { var sortedModules = _modules.GetSortedModuleListByDependency(); sortedModules.Reverse(); sortedModules.ForEach(sm => sm.Instance.Shutdown()); }
三、AbpBootstrapper
namespace Abp.Dependency { /// 此接口用于直接执行依赖项注入任务 public interface IIocManager : IIocRegistrar, IIocResolver, IDisposable { IWindsorContainer IocContainer { get; } /// 引用 Castle Windsor Container. new bool IsRegistered(Type type); /// 检测该类型是否已注册. new bool IsRegistered<T>(); /// 检测该类型是否已注册. } }
其中关系类图如下:

四、 AbpCoreInstaller

BasicConventionalRegistrar的代码,其注册所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类。

本博客Android APP 下载 |
![]() |
支持我们就给我们点打赏 |
![]() |
支付宝打赏 支付宝扫一扫二维码 |
![]() |
微信打赏 微信扫一扫二维码 |
![]() |
如果想下次快速找到我,记得点下面的关注哦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2016-12-05 C# Enum,Int,String的互相转换
2016-12-05 https://github.com/commonsensesoftware/More
2016-12-05 FrozenUI - 专注于移动web的UI框架
2016-12-05 Microsoft.Owin.Hosting 实现启动webapp.dll
2016-12-05 PHP操作mysql数据库:[2]查询数据听语音
2016-12-05 细说ASP.NET Core静态文件的缓存方式
2016-12-05 详解MySQL的用户密码过期功能