Context Engine support
The previous version of SDL DXA already supported Context Engine, class ContextEngine, ContextClaims, and subclasses, however it was implemented in the Sdl.Web.Tridion assembly.
The Context Engine was accessible via the public API WebRequestContext.ContextEngine (in Sdl.Web.Mvc), which required a direct reference from Sdl.Web.Mvc and, potentially a direct reference from the DXA-based Web application or module (if it used the WebRequestContext.ContextEngine public API).
Furthermore, the Context Engine API is rather user-friendly (explicit and strongly typed) but only provided access to a fixed, predefined set of known context claims.
To overcome these issues, in SDL DXA 1.1, the classes ContextEngine, ContextClaims and its subclasses (BrowserClaims, DeviceClaims and OperatingSystemClaims) have been moved to Sdl.Web.Mvc (namespace Sdl.Web.Mvc.Context) and a new extension point (IContextClaimsProvider) has been introduced to break the direct dependency between Sdl.Web.Mvc and Sdl.Web.Tridion.
An Ambient Data Framework-based Context Claims Provider (AdfContextClaimsProvider) is implemented in Sdl.Web.Tridion. The ContextEngine classfinds the Context Claims Provider through dependency injection (i.e. it is configured in Unity.config).
The Context Engine public API has been made extensible by supporting custom ContextClaims subclasses (BrowserClaims, DeviceClaims and OperatingSystemClaims are provided out of the box and are backwards compatible with SDL Tridion Reference Implementation 1.0). Furthermore, the ContextClaims class now exposes a public GetClaimValue<T> method with allows direct, strongly typed access to any context claim/property in a given "aspect"; each concrete ContextClaim subclass is associated with a single context claim called aspect (for example, browser, device and os for the subclasses mentioned).