我在一个项目中实现了INotifyPropertyChanged作为源生成器,我希望能够在各种以MVVM为中心的项目中使用它。
该项目使用将属性应用于分部类中的字段的方法,并将为这些字段生成Properties。
然而,我目前的项目是基于Monogame的,UI框架本身不支持绑定,所以我想我应该使用另一个源生成器来构建一个避免反射的解决方案。
不幸的是,在我的INotifyPropertyChanged源生成器中生成的属性在我的MLEM.Ui.Binding源生成器中似乎不可见。我只得到原始源代码中的属性。
有没有办法让INotifyPropertyChanged源生成器先运行,然后在第二个绑定源生成器中使用它生成的源代码?
我尝试过的东西:
- 按我想要的顺序排列我的项目参考(双向(
- 将
EmitCompilerGeneratedFiles
和CompilerGeneratedFilesOutputPath
设置为一个目录(我很难排除obj/Debug/生成的文件,所以我最终得到了重复的类(
正如Marc Gravell所解释的,这个问题的答案是No.
话虽如此,我还是成功地解决了这个问题,但不是通过在一个编译单元中链接多个源生成器。
我很幸运,我将绑定作为一组扩展方法生成,这意味着我可以将ViewModels和它们的INPC源生成器移动到它自己的项目中,然后在原始项目上运行绑定源生成器。
这意味着ViewModel程序集的输出已经稳定,当绑定源生成器检查它时,已组装的INPC代码已经就位
这可能不适用于所有人,但也许它打开了一种可能性。