我有3个项目
Project A (Client)
Project B (Server)
Project C (Shared)
在项目B中,我使用实体框架和所有实体类建立了DB连接,项目A(客户端(应无访问项目B(服务器(的权限。我想在很大程度上依赖DTO进行客户端/服务器通信。这些DTO应该在Project C中创建,这样客户端和服务器都可以使用它们。源生成器非常适合生成DTO,但源生成器是否可以使用项目B中的实体类来生成项目C中的DTO?
您只能为正在构建的当前项目生成内容,但只要您通过引用对所需类型具有可见性,您仍然可以从其他项目访问信息。GeneratorExecutionContext
具有context.Compilation.References
,它为您提供了所有的MetadataReference
挂钩。这是高级的,但您可以使用context.Compilation.GetAssemblyOrModuleSymbol(MetadataReference)
,它为每个引用提供类型模型的根;从到,您可以检查所有类型及其属性、属性等,大概是为了生成DTO。
然而,我想知道显式是否更容易/更可取,并在B
中做一些显式的事情,例如:
[module:GenerateDtoWhateverFor(typeof(B.Foo))]
[module:GenerateDtoWhateverFor(typeof(B.Bar))]
// etc
并检测/响应。