定制生成的代码
ABP Suite 允许您定制生成的代码块,并在下一次 CRUD 页面生成时保留您的自定义代码更改。它指定了钩子点,以允许添加自定义代码块。您写入这些钩子点的代码将被保留,并且不会在下一次 CRUD 页面生成时被覆盖。
启用自定义代码支持
要启用自定义代码支持,您应在 CRUD 页面生成 页面中勾选 可定制代码 选项(默认已选中)。启用自定义代码支持后,您将在应用程序的后端和 UI 端看到一些钩子点。
在 Visual Studio 中显示/隐藏自定义代码文件
当您启用自定义代码支持后,会在项目根目录下创建 .filenesting.json 文件,以在 Visual Studio 中隐藏自定义代码文件(带有 .Extended.* 后缀的文件)。因此,要能够看到自定义代码文件,您需要点击相关文件的展开图标,如下图所示:
ABP Suite 创建 .filenesting.json 文件是为了为您提供更有条理的项目结构。但是,如果您希望无需点击相关文件的折叠图标就能看到所有文件,那么您可以安全地删除 .filenesting.json 文件。
注意:ABP Suite 还会在项目根目录下创建一个
Directory.Build.props文件以启用动态文件嵌套。如果您考虑删除.filenesting.json文件,那么您也可以自由删除Directory.Build.props文件。
后端 - C# 端定制
在 C# 端,根据您创建的模板,您会看到一些抽象类以及从它们派生的类(用于实体、应用服务、接口、域服务等...)。
您可以在这些类中编写自定义代码(使用 *.Extended.cs 扩展名),下次当您需要重新生成实体时,您的自定义代码不会被覆盖(只有基础的抽象类会被重新生成,您在 Suite 上的更改会被尊重)。
例如,假设您创建了一个名为 Book 的实体,并且启用了自定义代码支持。那么,您的领域层的文件夹结构将如下所示:
从文件夹结构中可以看到,除了相关的实体、仓储接口和域服务类之外,还创建了一些额外的类(应用服务、DTO、控制器等也是如此)。
自定义代码可以添加到这些类中,特别是名为 *.Extended.cs 的文件中。通过将自定义代码放在这些文件中,您可以确保您的更改在下一次实体生成时不会被覆盖。
重要的是要注意,开发人员应避免修改
<suite-custom-code-autogenerated>...</suite-custom-code-autogenerated>占位符之间的代码,确保在添加新属性时实体的构造函数会被重新生成。
您还可以向接口添加新的方法契约,这些接口被特别标记为 partial 类,可以通过附加方法进行扩展,然后在您的自定义代码类中实现相关方法。
您可以在下面的示例中看到,在 IBookRepository 接口中定义新方法并在自定义仓储类中实现它的过程:
IBookRepository.Extended.cs |
EfCoreBookRepository.Extended.cs |
|---|---|
![]() |
![]() |
在 IBookRepository 接口中定义新方法 |
在 EfCoreBookRepository 类中实现该方法 |
注意:自定义代码支持不仅限于领域层组件(实体、仓储接口和管理器),本节所解释的一切也适用于应用服务、DTO、控制器等...
UI 端定制
对于 UI 端,ABP Suite 在 MVC、Blazor 和 Angular UI 的页面内提供了方便的注释占位符。这些注释部分作为钩子点,您可以在其中添加自定义代码。通过在这些钩子点放置自定义逻辑,您可以根据需要增强 UI,而不必担心在下一次 CRUD 页面生成时丢失更改。
MVC UI 上的定制
如果您使用 MVC UI 创建应用程序,您可以在 Pages 文件夹下看到_页面代码隐藏类_的扩展类:
在这些文件中,您可以重写 OnGetAsync 和 OnPostAsync 方法,并在向页面的 URL 发出 GET 或 POST 请求时重写默认行为,或者您可以添加更多验证、定制逻辑或任何您想要的操作... 下次重新生成实体时,您对这些文件的更改将被保留/尊重,不会被覆盖。
此外,如果您想对页面本身进行更改,您可以在相关的 .cshtml 文件中看到钩子点(<suite-custom-code-block-n>...</suite-custom-code-block-n> 占位符),并在这些占位符之间进行更改:
添加新的自定义钩子点并更改其位置
ABP Suite 定义了您可能想要进行定制的钩子点。但是,它也允许您决定钩子点应该位于某个文件中的哪个位置,并更改其位置。如果您想更改钩子点的位置,可以定制相关模板并更改占位符的位置或添加新的占位符。
如上图所示,您可以搜索相关的模板文件,点击卡片上的 编辑 按钮,然后进行更改,点击 确定 按钮保存对模板的更改。然后,每当您生成 CRUD 页面时,您在模板中进行的更改(例如添加或更改占位符)将被尊重,Suite 将使用定制后的模板,并将占位符放在您放置它们的位置。这样,您在 UI 端就有更大的自由度进行定制,并根据需要更新 UI。
注意:目前,CRUD 页面生成最多允许 11 个占位符,如果您有更多占位符,则额外的占位符将被忽略。从 ABP v8.0 开始,最多允许 20 个占位符。
Blazor UI 上的定制
如果您使用 Blazor UI 创建应用程序,您可以在 Pages 文件夹下看到_页面代码隐藏类_的扩展类:
在这些文件中,您可以添加更多验证、定制逻辑或进行任何您想要的操作... 下次重新生成实体时,您对这些文件的更改将被保留/尊重,不会被覆盖。
此外,如果您想对页面本身进行更改,您可以在相关的 .razor 文件中看到钩子点(<suite-custom-code-block-n>...</suite-custom-code-block-n> 占位符),并在这些占位符之间进行更改:
添加新的自定义钩子点并更改其位置
ABP Suite 定义了您可能想要进行定制的钩子点。但是,它也允许您决定钩子点应该位于某个文件中的哪个位置,并更改其位置。如果您想更改钩子点的位置,可以定制相关模板并更改占位符的位置或添加新的占位符。
如上图所示,您可以搜索相关的模板文件,点击卡片上的 编辑 按钮,然后进行更改,点击 确定 按钮保存对模板的更改。然后,每当您生成 CRUD 页面时,您在模板中进行的更改(例如添加或更改占位符)将被尊重,Suite 将使用定制后的模板,并将占位符放在您放置它们的位置。这样,您在 UI 端就有更大的自由度进行定制,并根据需要更新 UI。
注意:目前,CRUD 页面生成最多允许 11 个占位符,如果您有更多占位符,则额外的占位符将被忽略。从 ABP v8.0 开始,最多允许 20 个占位符。
Angular UI 上的定制
在 Angular 端,有两种类型的服务:
- *.abstracts.service.ts
- *.service.ts。
当 可定制代码 设置为 true 时,每次执行原理图时,.abstract. 文件都会重新创建,而 .service. 文件只会生成一次。因此,可以对 .service.ts 文件进行修改,并保留您的更改。
Angular 中的组件
与服务类似,有两种类型的组件:
abstract.component.tscomponent.ts
每次执行原理图时,.abstract.component.ts 文件都会重新创建,而 .component.ts 文件的代码只会生成一次,因此您的自定义更改会被保留。
HTML 定制
启用 可定制代码 后,ABP Suite 在 HTML 文件中引入了自定义注释占位符。例如:
<!--<suite-custom-code-block-0>-->
<!--</suite-custom-code-block-0>-->
通过将您的自定义代码放在这些占位符之间,ABP Suite 会在重新生成期间保留它并将其移动到新文件中。您可以使用不同的占位符编号添加多个模板,确保唯一性并匹配结束占位符。占位符的顺序不需要有序,可以不同。
其他文件
由 ABP Suite 创建的其他文件无法定制。它们在重新生成期间无法保留,并且大多数时候您甚至不需要定制它们。
抠丁客














