Jot与IOC容器集成:一行代码自动跟踪容器创建的每个对象

Jot与IOC容器集成:一行代码自动跟踪容器创建的每个对象 Jot与IOC容器集成一行代码自动跟踪容器创建的每个对象【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot在.NET应用开发中窗口大小、表单位置、用户偏好这类状态的保存与恢复几乎是每个桌面应用都绕不开的重复劳动。Jot 就是一个专为 .NET 应用打造的轻量级状态持久化库你只需声明要跟踪对象的哪些属性、在什么时机保存剩下的读写逻辑全部交给它。而真正让开发者眼前一亮的是——当 Jot 与 IOC 容器集成后仅需一行代码就能自动跟踪容器创建的每一个对象让状态管理彻底隐形。本文就带你从零上手 Jot并掌握这套高效的 IOC 集成方案。传统状态持久化为什么让人头疼回顾传统的.settings文件方案以保存一个窗口的大小和位置为例每个属性你至少要写 5 处——在设置文件中定义一次、构造函数中读取两次、关闭事件中写入两次。如果应用里有 10 个可调整大小的 UI 元素设置文件很快就会变成一团乱麻代码冗长且极易出错。这正是 Jot 想要解决的痛点它把跟踪哪些属性和何时保存抽象成声明式配置让代码更简洁、意图更清晰。Jot 是什么.NET 状态持久化的优雅答案Jot 是一个开源 .NET 库通过 NuGet 一行命令即可安装install-package Jot它的核心只有一个概念Tracker跟踪器。你为某种类型声明跟踪规则然后对每个实例调用Track()Jot 就会自动完成应用已保存状态和监听事件以保存新状态两个动作。核心源码可参考 Tracker.cs 和 TrackingConfiguration.cs。Jot 三步入门配置、跟踪、存储第一步为类型配置跟踪规则通常在启动类中完成tracker.ConfigureWindow() .Id(w w.Name) .Properties(w new { w.Top, w.Left, w.Width, w.Height, w.WindowState }) .PersistOn(nameof(Window.Closing));第二步跟踪具体实例tracker.Track(this); // 在窗口构造函数中调用第三步选择存储位置默认使用JsonFileStore数据以 JSON 文件形式存放在%AppData%\[公司名]\[应用名]目录下每个对象一个文件。你还可以实现简单的IStore接口把数据存到数据库甚至云端。Jot 与 IOC 容器集成一行代码的魔法 ✨在大型应用中绝大多数对象都由 IOC 容器创建。Jot 巧妙利用了这一点在容器初始化每个对象时自动调用tracker.Track()从而无需在每一个对象内部手动写跟踪代码。以 SimpleInjector 为例只需一行代码var tracker new Jot.Tracker(); var container new SimpleInjector.Container(); // 容器创建的每个对象自动开始跟踪 container.RegisterInitializer(d { tracker.Track(d.Instance); }, cx true);这段代码做了三件事容器每创建一个对象RegisterInitializer回调立即触发Jot 根据该对象类型自动查找预先配置的跟踪规则应用已保存的状态并监听事件准备保存新状态。从此你只需要专注配置哪种类型要跟踪哪些属性而不必关心何时、何地调用 Track——容器全包了。Demo 中 WPF 工程的 Services.cs 和 MainWindow.xaml.cs 就展示了类似的跟踪配置方式。其他 IOC 容器的集成思路 SimpleInjector 的RegisterInitializer只是其中一种实现其他主流容器也提供了类似的钩子Unity使用RegisterType的注入成员或OnDemand拦截器Autofac利用OnActivating事件在实例激活时调用tracker.Track(e.Instance)Microsoft.Extensions.DependencyInjection自定义ITypeActivator或工厂方法。核心思路完全一致在容器创建完成对象的钩子里补上一句tracker.Track(instance)。实际应用WPF 与 WinForms 的窗口状态保存Jot 最常见的应用场景就是保存窗口状态。针对不同 UI 框架配置略有差异WPF 窗口跟踪Top/Left/Width/Height/WindowState在Closing事件时持久化并把屏幕分辨率加入 Id避免窗口被恢复到已拔掉的显示器上WinForms 窗体需要在OnLoad中跟踪构造函数中设置Top/Left会被忽略且要跳过最大化/最小化时的无效尺寸数据。Demo 目录下的 TestWPF 和 TestWinForms 两个示例工程提供了可直接运行的完整参考实现。进阶技巧属性级配置与继承复用逐属性配置Property(p p.Age, -1)可为属性指定默认值继承复用为基类配置的跟踪规则会自动复制到派生类只需补充新增属性即可例如为MyForm额外跟踪tabControl.SelectedIndex动态配置实现ITrackingAware接口见 ITrackingAware.cs可在运行时按实例灵活调整跟踪内容。总结让状态持久化回归简单Jot 的价值在于把状态持久化从分散在各处的样板代码中解放出来变成一处声明、全局生效。而Jot 与 IOC 容器集成则是这套理念的集大成者——一行代码自动跟踪容器创建的每个对象之后任何对象的任何属性只需修改跟踪配置即可持久化既不用改业务代码也不用担心遗漏。如果你正在用 WPF、WinForms 或 Avalonia 构建 .NET 桌面应用不妨试试这套配置一次、全程托管的状态持久化方案把宝贵的时间留给真正的业务逻辑。【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考