我花了9个月时间,在unity上开发一个开源的DI框架-Saneject,并且如今它正式发布了1.0.0。
我最初想要创建DI框架,但并不希望引入额外的礼仪(ceremony)、隐藏的编排(wiring)、运行时(runtime)加载以及额外的生命周期(lifecycle Layer)。我希望DI框架能够与Unity一起工作,反而不是在Unity之外工作。
所以,我构建了一个新思路:在Unity编辑器中解析依赖关系,并直接在序列化字段中写入它们。这样一来,编排(wiring)就可以在编辑器(Inspector)中可见,包括接口(由于一些Roslyn-generated隐形boilerplate),而运行时则可以正常工作。
这一概念证明了它的有效性,但实现过程中存在一些问题:它不够坚固,基本上是一个大的循环来处理遍历、发现、验证、注入和日志等功能,但与工作职责无关。
在六个月后,我意识到需要停止扩展,并重写核心机制。rewrite将Saneject的基础打造得更加坚实,使用了图形与阶段的体系结构,它也让我修复了那些老模型中的一些根本缺陷。
虽然Saneject 在beta阶段公开了一段时间,但是现在它才是能够称之为稳定版本的版本。
Saneject并不打算去回答所有的DI的用例,取而代之的是编排(wiring)变成了作家(authoring)的工作流程的一部分,结果将会固定在编译时,因此这正是我的目标。但是,它并不适用于各种类型的项目。
我制作了一个幻灯片,快速介绍了Saneject。(对于更深入的了解,请参阅Saneject的文档,包括入门、核心概念、架构、API和更多)
如果你尝试它,非常感谢,让我知道哪些地方正常工作了、哪些地方没有、哪些地方感觉并不清楚,而它是否适用于你的项目模型。
- 支持的unity版本:2022.3.12 +
- github地址:https: // github.com/alexanderlarsen/Saneject
- 文档与api:https: // saneject.dev
- 架构概览:https: // saneject.dev/docs/architecture/architecture-overview
- 提供更好的幻灯片:https: // saneject.dev/slides
我不停地被Reddit的 filtro 阻止,所以这条消息推出得晚了一些。之前我设定的时间已经超过了,但是我会在短时间内检查它并回答问题。
评论 (0)