xaf

SKILL.md

XAF (eXpressApp Framework) — Skill Index

DevExpress XAF is a cross-platform .NET application framework for building business applications (Blazor Server and WinForms). It provides MVVM architecture, ORM integration (EF Core and XPO), security, validation, and rich module ecosystem.

Versions covered: v24.2 and v25.1 Platforms: Blazor Server, WinForms, Web API (OData) Official docs: https://docs.devexpress.com/eXpressAppFramework/112670/expressapp-framework DevExpress MCP: https://api.devexpress.com/mcp/docs


Sub-Skills — When to Use Each

Data Modeling

Skill Load When
xaf-xpo-models Defining XPO persistent objects (XPObject, BaseObject, associations, PersistentAlias)
xaf-ef-models Defining EF Core entities (BaseObject EF, virtual properties, DbContext, migrations)
xaf-nonpersistent Creating NonPersistent objects for custom data sources, API wrappers, input dialogs

UI Construction

Skill Load When
xaf-controllers Creating controllers, SimpleAction/PopupWindowShowAction/SingleChoiceAction/ParametrizedAction
xaf-editors Working with built-in property editors, list editors, GridListEditor customization
xaf-custom-editors Building custom property editors (Blazor/WinForms) or custom list editors
xaf-conditional-appearance Conditionally hiding/disabling/coloring UI elements via [Appearance] attribute

Platform-Specific

Skill Load When
xaf-blazor-ui Blazor-specific UI, thread safety (InvokeAsync), Razor components in XAF, JS interop
xaf-winforms-ui WinForms-specific UI, XtraGrid access, background workers, layout, splash

Security & Multi-Tenancy

Skill Load When
xaf-security Roles, permissions, authentication (Standard/AD/OAuth2), programmatic permission checks
xaf-multi-tenant Multi-tenant SaaS apps with separate DB per tenant (v24.2+)

Services & API

Skill Load When
xaf-web-api Building/consuming XAF OData Web API (JWT, custom endpoints, $filter/$expand)
xaf-validation Validation rules (RuleRequiredField, RuleCriteria, custom rules, programmatic validation)

Modules & Features

Skill Load When
xaf-reports XtraReports integration (setup, predefined reports, export, designer, parameters)
xaf-dashboards Dashboard analytics (setup, data sources, designer, permissions)
xaf-office File attachments, Spreadsheet editor, RichText editor, PDF viewer

Deployment

Skill Load When
xaf-deployment IIS/Azure/Docker for Blazor, ClickOnce/MSI for WinForms, migrations, license, logging

Diagnostics & Quality

Skill Load When
xaf-memory-leaks Diagnosing memory leaks, auditing event handler cleanup, reviewing ObjectSpace/CollectionSource lifetime

Quick Architecture Reference

MySolution/
├── MySolution.Module/          ← platform-agnostic (business objects, controllers, modules)
│   ├── BusinessObjects/
│   ├── Controllers/
│   └── MySolutionModule.cs
├── MySolution.Blazor.Server/   ← Blazor-specific (Program.cs, BlazorApplication.cs)
│   └── DatabaseUpdate/Updater.cs
├── MySolution.Win/             ← WinForms-specific (Program.cs, WinApplication.cs)
└── MySolution.WebApi/          ← Web API service (Program.cs, OData endpoints)

Key Concepts

  • ObjectSpace (IObjectSpace) — unit of work; wraps EF Core DbContext or XPO Session. Not thread-safe. Never store in singleton services.
  • XafApplication — application lifecycle, module registration, ObjectSpace creation.
  • ModuleBase — platform-agnostic module; registers business objects, controllers, navigation items.
  • Application Model — XML/in-memory model describing Views, Actions, Navigation — customizable without recompilation.
  • DatabaseUpdater — runs on startup to apply schema changes and seed data (Updater.cs).

Common Pitfalls (Quick Reference)

Pitfall Fix
ObjectSpace in singleton service Use IObjectSpaceFactory + using var os = factory.CreateObjectSpace(...)
async/await + ConfigureAwait(false) in Blazor Remove ConfigureAwait(false) — Blazor needs sync context
Non-virtual EF Core properties All EF Core entity properties must be virtual
XPO property without SetPropertyValue Use backing field + SetPropertyValue for change tracking
AddDbContext instead of AddDbContextFactory XAF requires IDbContextFactory<T>
NonPersistent provider registered first Register .AddNonPersistent() after persistent providers

Useful Links

Weekly Installs
5
GitHub Stars
2
First Seen
6 days ago
Installed on
opencode5
claude-code5
github-copilot5
codex5
kimi-cli5
amp5