v4.0: New modeling API, expanded UI support and data improvements
Published by Marco on
The summary below describes major new features, items of note and breaking changes. The full list of issues is in the release notes below and is available to those with access to the Encodo issue tracker.
Metadata & Modeling
Most of the existing metadata-building API has been deprecrated and replaced with a fluent API that is consistent and highly extensible.
- Improve support for multi-language properties (QNO-5437, QNO-5362, QNO-5481, QNO-5479, QNO-5477, QNO-5469, QNO-5468, QNO-5452, QNO-5290, QNO-5500, QNO-5478)
- Improve metadata API (QNO-5281, QNO-5502, QNO-2901, QNO-5539, QNO-5508, QNO-5579, QNO-5578, QNO-5577, QNO-5575, QNO-5565, QNO-5560, QNO-5559, QNO-5545, QNO-5510, QNO-5493)
- Improve metadata-modeling for expression-based settings (fail fast) (QNO-5396, QNO-5361, QNO-5358, QNO-5355, QNO-5353, QNO-5453, QNO-2750, QNO-5454)
- Add support for auto-generated metaids (QNO-5348)
- No longer allow setting of
- Make wrapper metadata and wrapper lists obsolete (QNO-5325, QNO-5408, QNO-5256)
IMetaClass.Actionsauto-managed and read-only sequences (QNO-5402, QNO-5400, QNO-5400)
- Removed I18N module
MetaBuilderalong with associated metadata builders and extension methods.
- Use layouts for all UIs (Web, Winform, WPF) (QNO-5365, QNO-5418, QNO-5382, QNO-5379, QNO-5376, QNO-5359, QNO-5340, QNO-5335, QNO-5470, QNO-5501, QNO-4962, QNO-5413, QNO-5573)
- Added a generalized WebAPI and UI with a full-fledged Sandbox implementation (QNO-5472, QNO-5471, QNO-5411)
- Remove Winform dependency on GlobalContext (QNO-5050)
- Improve asynchronous UI support for Winform/WPF (QNO-5569, QNO-5563)
IDataSessionsticky, by default (QNO-5018)
IDataObject(QNO-5429, QNO-5238, QNO-4737, QNO-3043)
- Improve data-seeding and generation (QNO-5304, QNO-5546, QNO-5589, QNO-5568, QNO-5567, QNO-5566, QNO-5561)
- Add single-object saving (instead of whole graph) (QNO-2525)
- Improve default-value setting & handling in
- Improve compatibility of generated code with StyleCop/best practices (QNO-5252, QNO-5584, QNO-5515)
- Add support for integrating interfaces into generated code (QNO-5585)
- Finalize support for including generated code in a separate assembly. Generated code can now be in a separate assembly from the modeling code.
- Removed WinformDx code generator (QNO-5324)
- Improve debugging with Quino sources and Nuget packages (QNO-5473)
- Improve directory-services integration (QNO-5421)
- Reworked the plugins system (QNO-2525)
- Improve assembly-loading in tests and tools (QNO-5538, QNO-5571)
- Improve registration API for external loggers; integrate Serilog (QNO-5591)
- Improve schema-migration logging (QNO-5586)
- Allow customization of exception and message formatting (QNO-5551, QNO-5550)
Metadata & Modeling
Encodo.Quino.Builders.Extensionsnamespace has been removed. All members were moved to
- The assembly
Quino.Meta.Standardno longer exists and may have to be removed manually if Nuget does not remove it for you.
- Added default
- Added empty constructor to
- Even deprecated versions of
AddValueListProperty()all expect a parameter of type
IDataSessionAwareListis used instead of
- Two constructors of
DataListhave been made private
GenericObject.DoSetDedicatedSession()is no longer called or overridable
- None of the classes derived from
IApplicationas constructor parameters anymore. Instead, use the Application or Session to create the authenticator with
GetInstance<TService>(). E.g. if before you created a
TokenAuthenticatorwith this call,
new TokenAuthenticator(Application), you should now create the
Application.GetInstance<TokenAuthenticator>(). You are free also to call the new constructor directly, but construction using the IOC is strongly recommended.
- The constructor for
DataSessionhas changed; this shouldn’t cause too many problems as applications should be using the
IDataSessionFactoryto construct instances anyway.
- DataGenerators have changed considerably. Implement the
IDataGeneratorinterface instead of using the
- The names of
ISchemaDifferencehave changed, so the output of a migration plan will also be different. Software that depended on scraping the plan to determine outcomes may no longer work.
- Default values are no longer implicitly set. A default value for a required property will only be supplied if one is set in the model. Otherwise, a
NULL-constraint violation will be thrown by the database. Existing applications will have to be updated: either set a default value in the metadata or set the property value before saving objects.
- The generated filename for builders has changed from “Extensions.cs to “Builders.cs”. When you regenerate code for the V2 format, you will have include the new files and remove the old ones from your project.
- Data-language-specific properties are no longer generated by default because there is no guarantee that languages are available in a given application, You can still enable code-generation by calling
SetCodeGenerated()on the multi-language or value-list property
- The generated MetaModelBuilder classes are no longer generated. QNO-5515
LanguageTools.GetCaption()no longer defaults to
GetDescription()because this is hardly ever what you wanted to happen.
CaptionExtensionsare now in
CaptionToolsand are no longer extension methods on
ReflectionExtensionsare now in
ReflectionToolsand are also no longer extension methods on
Operation<>with new method signature
Some Windows-specific functionality has been moved to new assemblies. These assemblies are automatically included for Winform and WPF applications (as before). Applications that want to use the Windows-specific functionality will have to reference the following packages:
WindowsIdentity-based code, use the
Encodo.Connections.Windowspackage and call
ApplicationSettingsBasesupport, use the
Encodo.Application.Windowspackage and call
- For Directory Services support, use the
Encodo.Security.Windowspackage and call