v1.9: Plugins, model overlays and more!
The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.
- Plugins: You can now extend your Quino applications with plugins. The application can determine the locations from which plugins are loaded but the default behavior is to load plugin assemblies from a folder next to the executable as well as from a folder in the user's local configuration folder. Also by default, if the application is running in debug mode, C# files in those directories are compiled and loaded as plugins as well. This allows developers or demonstrators in the field to update the metadata without using Visual Studio to recompile the application.
- Software Update: The software updater component now supports HTTP as well as file-shares and downloads the file locally before executing it, showing download progress for slower connections or larger updates.
- Remoting Routes: QNO-4060: Routes/URLs on the remote server are now resolved using a registry of route handlers. An application is free to replace or enhance the standard route handlers or add new ones. Testing support remoting has been improved (i.e. configuration of a loopback remoting server has been vastly simplified and encapsulated in a
- Data sources: QNO-4048, QNO-3628, QNO-4034, QNO-4037, QNO-4051, QNO-4139, QNO-4140, QNO-4071: Multiple remote data sources are now supported throughout the configuration, startup, login and application.
- Optimistic locking: QNO-4049: Added aspects to include optimitic-locking support for meta-classes
- Change tracking: QNO-4050: Added aspects to include change-tracking support for meta-classes
- Model names: QNO-4152, QNO-4156: Improved support for models with long(er) names (in particular, schema migration now works as expected)
- VS Project template: QNO-4149, QNO-4150, QNO-4151: Improved the Quino project/solution Visual Studio 2012 template
- Error messages: QNO-4081, QNO-4166: Improved error messages for data-source errors and improved the API for formatting error user-facing messages
- Remoting Driver: QNO-4075, QNO-4080, QNO-4068, QNO-4060, QNO-4059, QNO-4056, QNO-4037: Made many improvements and optimizations to the remoting data driver
- Caching: QNO-140, QNO-3809, QNO-3808: Made several improvements to caching API, including new default providers for the default
- Many-to-many Relations: QNO-4219: Added a
QueryAspect to show read-only views of many-to-many relations
- Object comparison: QNO-4027: GenericObject should be comparable to other GenericObjects or PK values
IMetaReadable.GetValue() behavior is inconsistent with relations and methods. The behavior or reading a related object or list using GetValue() has changed. Previously, the value returned non-null only if it had been caused to load by using
GetList()) or if it had a
ValueGenerator. If it was generated with a
ValueGenerator, it was always regenerated, ignoring the value of
- QNO-4028: GenericObject should behave correctly when adding to a HashSet. Previously, the hash-code generated for GenericObjects was not well-matched to the result of the
Equals() method, which resulted in unpredictable behavior with hash tables, sets or dictionaries. This has been fixed, but applications that relied on the formerly unpredictable behavior will now function differently.
- The enum
DatabaseState no longer exists. It has been replaced with
ILoginValidator<TApplication> interfaces have all acquired a method with interface
void LoadSettings(TConfiguration configuration, IMessageRecorder recorder).
Encodo.Data.SessionFlags have been moved to
- The signature of
ICoreConfiguration.GetConnectionDetails()no longer returns a simple string, but a sequence of strings. To restore , use
EnryptionType was moved from
DirectoryServiceSettings.ServerUri is deprecated; use
MetaBuilderModuleTools has been renamed to
MetaBuilderBasedMetadataGeneratorBase.ConfigureBuilder() no longer exists; instead, override MetaBuilderBasedMetadataGeneratorBase.RegisterDependencies().
MetaBuilder.AddMultiLanguageProperty() now requires a base
MetaBuilder.AddWrapperClass() no longer requires a