0

我有一个项目,我已经将 INotifyPropertyChanged 实现为源生成器,我希望能够在我的各种以 MVVM 为中心的项目中使用它。

该项目使用将属性应用于部分类中的字段的方法,它将为这些字段生成属性。

然而,我目前的项目是基于 Monogame 并且 UI 框架本身并不支持绑定,所以我想我会使用另一个源生成器来避免反射的解决方案。

不幸的是,在我的 INotifyPropertyChanged 源生成器中生成的属性似乎在我的 MLEM.Ui.Binding 源生成器中不可见。我只得到原始源代码中的属性。

有没有办法让 INotifyPropertyChanged 源生成器首先运行,然后在我的第二个绑定源生成器中使用它生成的源代码?

我尝试过的事情:

  • 按我想要的顺序排列我的项目引用(双向)
  • Setting EmitCompilerGeneratedFiles and CompilerGeneratedFilesOutputPath to a directory (I struggled to exclude the files in obj/Debug/generated so I ended up with duplicate classes)
4

1 回答 1

0

正如 Marc Gravell 所解释的,这个问题的答案是否定的。

话虽如此,我已经成功地解决了这个问题,但不是通过在单个编译单元中链接多个源生成器。

我很幸运,我将绑定生成为一组扩展方法,这意味着我可以将我的 ViewModel 和它们的 INPC 源生成器移动到它自己的项目中,然后让我的绑定源生成器在原始项目上运行。

这意味着 ViewModel 程序集的输出已经稳定,当绑定源生成器检查它时,组装的 INPC 代码已经到位。

这可能并不适合所有人,但也许它开启了一种可能性。

于 2021-07-24T01:56:55.580 回答