This blog is based on one of my recent experience where it was required to disable On Demand Loading of Model Configurations in an existing Sitecore 9 application using Glass.Mapper.Sc 5.
Majority of Model configurations in this application were done via Auto mapping and Attribute configurations.
I am sharing here learning I had and some of details regarding the Glass.Mapper.Sc configurations.
Setting Up the Context: Before mentioning the Steps I did for disabling On Demand loading – Let’s understand some details with respect to Model Configurations and their loading details.
What are the available Model Configurations
In Glass.Mapper.Sc – we have 3 ways to configure our mapping Model (Model Configurations)
- Attribute Configuration
- Fluent Configuration
What is On-Demand Loading :
Out of Box – Glassmapper supports On-Demand Loading – which means all the Model configurations will be loaded as and when Model call is made in the application.
Why would we need to disable On-Demand Loading.
- to ensure all the Model configurations are loaded as part of application startup.
- Would be handy for any Model Validation during application start up.
- To avoid referred types being loaded incorrectly.
How to load Model Configurations explicitly:
- via SitecoreAttributeConfigurationLoader : for Attribute Configurations defined in GlassMapperScCustom.cs
- via SitecoreFluentConfigurationLoader : for Fluent Configurations defined in GlassMapperScCustom.cs
- explicitly set OnDemandMappingEnabled as “false” in App_Start\GlassMapperScCustom.cs
- Define Attribute Configuration Loader in App_Start\GlassMapperScCustom.cs
- Make sure all Models(Class/Interface) in the assembly has [SitecoreType] attribute defined.
- This is required as we sometimes add field level attribute mapping and do not add SitecoreType attribute on Class/Interface.
- In the application I was working had majority of configurations defined via auto-mapping (without any attribute configurations)- So next step was to go in each of such class/Interface and add attribute : [SitecoreType(AutoMap =true)] .
- Field (which are auto-mapping enabled )- can be left as is.
- Above 2 steps are requied as SitecoreAttributeConfigurationLoader looks for [SitecoreType] attribute while loading the Model configurations during application start up.
- Without [SitecoreType] defined : class/interface is ignored, even if the properties have attributes defined.
- The other option is to use Fluent Configurations for mapping Model as using Fluent Configuration ensures Configuration is loaded during application start up.