Coding Style
Add this feature using AddCodingStyles() extension;
app.Features.AddCodingStyles([...]);
Add/Remove Child
Configures routes for methods in AddChild and RemoveChild(Child) signature
to have a resource route POST /../children and DELETE /../children/{childId}
respectively.
c => c.AddRemoveChild()
Command Pattern
Uses class names as route and removes Execute and Process names from route.
c => c.CommandPattern()
Entity Extension via Composition
Allows classes to extend entities via composition. This marks a transient class as an entity extension when it implements implicit casting to an entity. Methods of these extension classes are rendered under entity group.
c => c.EntityExtensionViaComposition()
Entity Subclass via Composition
Allows classes to be subclasses of entities via composition. This marks a transient class as an entity subclass when it implements explicit casting to an entity. Methods of these extension classes are rendered under entity group. It uses the first unique property to discriminate entity records.
First unique property is expected to be
enumorstring. Otherwise subclass routing won't work.
c => c.EntitySubclassViaComposition()
Namespace as Route
Reflects namespace of a domain class as base route for its endpoints.
c => c.NamespaceAsRoute()
Object as JSON
Configures all object parameters, return types and properties to be treated as
JSON content.
c => c.ObjectAsJson()
Records are DTOs
Configures domain type records as valid input parameters. Methods containing record parameters render as api endpoints.
c => c.RecordsAreDtos()
Remaining Services are Singleton
Adds SingletonAttribute to the services that has no TransientAttribute or
ScopedAttribute.
c => c.RemainingServicesAreSingleton()
Rich Entity
Adds QueryAttribute to classes that inject IQueryContext<TEntity>. Using
generic argument of IQueryContext<TEntity> finds corresponding entity class
and add EntityAttribute to it.
Configures NHibernate to initialize entities using dependency injection, making
them rich entities.
Configures routes and swagger docs to use entity methods as resource actions.
c => c.RichEntity()
Rich Transient
Configures transient services as api services. This coding style allows you to
have a public initializer (With) with parameters which will render as query
parameters or single id parameter which will render from route.
Rich transients with id types can be method parameters and located using
their initializers.
Configures routes and swagger docs to use entity methods as resource actions.
c => c.RichTransient()
Scoped by Suffix
Adds ScopedAttribute to the services that has name with any of the given
suffixes.
c => c.ScopedBySuffix(suffixes: ["Context", "Scope"])
Default suffix is
Context.
Single by Unique
Scans query classes to have methods that conforms to SingleBy[Property] naming
convetion. Treats such methods as single by unique methods and adds that
property to entity id route parameter so that entites can be found through
unique properties as well as their ids. For instance, if entity has
SingleByName then its id route parameter is updated from {id} to
{idOrName}.
c => c.SingleByUnique()
Uri Return is Redirect
Adds redirect support to your api endpoints. It configures an endpoint to use
redirect result when its corresponding method returns Uri. Combined with
CommandPattern, it allows you to create callback GET endpoints when method
doesn't have any parameters. For actions that have parameters, it configures its
corresponding endpoint to accept form instead of a json body.
c => c.UriReturnIsRedirect()
Use Built-in Types
Configures built-in .NET types to be used as entity properties and service
parameters. Uses IParsable interface to configure primitives. Additionally
configures string, enums, Uri and IEnumerable<> types.
It also allows for string properties to use TEXT column type instead of
VARCHAR by suffixes.
c => c.UseBuiltInTypes(textPropertySuffixes: ["Data", "Description"])
Default text property suffix is
Data.
Use Nullable Types
Adds support for nullable value and reference types. Configures api model to forbid sending null or empty values to not-null parameters.
c => c.UseNullableTypes()
With Method
Adds TransientAttribute to the services that has a With method. This coding
style makes usages like newEntity().With(name) possible.
c => c.WithMethod()