Lynicon allows modules and client code to extend most existing content container types. CoreDb achieves this by scanning the loaded assemblies when the application initialises to find all the types inheriting from base types registered with it. It then dynamically creates a type which inherits from the base type and includes all the fields from all the types it has found. It marks this type as having any interfaces associated with the subtypes it has found which are appropriate.
The Data API will then return values of the dynamic type it has created cast to the base container type. To access the extended fields, you can cast this to the appropriate interface. To illustrate this, the steps required to extend the User type, a common requirement for client code, are shown below.
Extending the User type
The steps are as follow:
- Add the relevant fields to the database record User e.g. Postcode.
- Declare a class (e.g. NewUser) which inherits from User in the client code.
- Declare an interface (e.g. INewUser) containing any number of the base type fields plus Postcode and attach it to NewUser, so the top line would be:
public class NewUser : User, INewUser - All Users retrieved from calls to the Data API will now contain the Postcode field in the underlying type, which will also implement INewUser. To get the postcode of the current user, do this:
var postcode = ((INewUser)LyniconSecurityManager.Current.User).Postcode;
Add Comment