厉害了,找到一个完全支持 Native AOT 的 MVC 框架

张开发
2026/4/10 0:04:30 15 分钟阅读

分享文章

厉害了,找到一个完全支持 Native AOT 的 MVC 框架
欢迎来到 Dotnet 工具箱在这里你可以发现各种令人惊喜的开源项目AOTBread.Mvc 是一个完全支持 Native AOT 的 MVC 框架搭配同样支持 AOT 的 Avalonia直接让你的开发效率事半功倍。项目开源在 Gitee欢迎感兴趣的同学来 Star。IOC 很重要IoC容器是 MVC 框架的核心所以为了支持 AOTBread.Mvc 框架选择使用了 ZeroIoC 作为 IoC 容器这是一款摒弃了反射的 IoC 容器具有极高的性能并且完全兼容AOT。另外为了支持 .net 7, 作者还对 ZeroIoC 代码做了零星修改重新发布在 Bread.ZeroIoC给作者点个赞。不能使用反射由于不能使用反射ZeroIoc 就使用了 SourceGenerator 技术它可以在编译期生成注入代码这个机制依了赖 ZeroIoCContainer 来触发。下面是一个代码示例using Bread.Mvc; using ZeroIoC; namespaceXDoc.Avalonia; publicpartialclassSessionContainer : ZeroIoCContainer { protected override void Bootstrap(IZeroIoCContainerBootstrapper builder) { builder.AddSingletonIAlertBox, AlertPacker(); builder.AddSingletonIMessageBox, MessagePacker(); builder.AddSingletonIUIDispatcher, MainThreadDispatcher(); builder.AddSingletonSession(); builder.AddSingletonSessionController(); } }MVC 架构用户的输入被抽象为 CommandCommand 连接用户界面和 Controller。可以参考下面的代码声明自己的 Commandpublic staticclassAppCommands { publicstatic Command Load { get; } new(nameof(AppCommands), nameof(Load)); publicstatic Command Save { get; } new(nameof(AppCommands), nameof(Save)); publicstatic AsyncCommandstring, string ImportAsync { get; } new(nameof(AppCommands), nameof(ImportAsync)); publicstatic Command Delete { get; } new(nameof(AppCommands), nameof(Delete)); }ControllerController 是业务逻辑的入口在这里集中处理程序的各种逻辑。在上面 IoC 注册的例子中SessionController 就是一个我们自己定义的 Controller 类。Controller 子类能自动注入已注册过的服务Model。请尽可能使用组合模式以防止 Controller 代码体积膨胀。参考下面的代码public classSessionController : Controller, IDisposable { readonly AppModel _app; readonly Session _session; readonly ProjectModel _prj; SerialTaskQueueDoc? _loadTask new(); public SessionController(AppModel app, Session session, ProjectModel prj) { _app app; _prj prj; _session session; SessionCommands.SwitchData.Event SwitchData_Event; SessionCommands.SwitchDoc.Event SwitchDoc_Event; SessionCommands.SwitchImage.Event SwitchImage_Event; SessionCommands.NextImage.Event NextImage_Event; SessionCommands.PreviousImage.Event PreviousImage_Event; SessionCommands.SaveDoc.Event SaveDoc_Event; SessionCommands.NextDoc.Event NextDoc_Event; _loadTask.Start(); _prj.Loaded _prj_Loaded; } }Bread.Mvc 非常棒完全支持 Native AOT 的 MVC 框架再搭配同样支持 AOT 的 Avalonia效果非常好。往期推荐:基于 C# 开源的功能强大 .NET 人脸识别 API使用 .NET 技术构建 AI 超元域桌面应用8k Star .NET 最好用的规则验证组件全能 WinForm 开发框架 - ReaLTaiizor太强了基于 .NET 开发的 AI 无损放大工具项目地址Bread.Mvc分享点收藏点点赞点在看

更多文章