Release Notes
Gazel follows [major].[minor].[patch]
version format. It is basically
Semantic Versioning, but with a small difference;
[major]
: Starting from v5.x.x, this part will follow major .NET releases without backward compatibility. So if Gazel is on v5.x.x then it is compatible with .NET 5, if it is v6.x.x then it is compatible with .NET 6, and so on.[minor]
: When there is a new feature on top of an existing major release, it means it is a minor release.[patch]
: When new release only includes a bugfix or an improvement without any new functionality or breaking change, it is only a patch.
v5.2.0
Features
- Support for
async / await
has arrived!async
services are marked asAsync
context.Remote
has three different overloads- use
Do
to make sync calls to sync services - use
await Do
to make async calls to async services - use
await DoAsync
to make async calls to sync services
- use
context.WithNewTransaction
has three differrent overloads- use
Do
to make sync transactions with sync functions - use
await Do
to make async transactions with async functions - use
await DoAsync
to make async transaction with sync functions
- use
- Client Api generates
Async
andSync
overloads- sync service -> sync & async client
void Do()
->void Do() & Task DoAsync()
- async service -> sync & async client
Task Do()
->Task Do() & void DoSync()
Task DoAsync()
->Task DoAync() & void Do()
- sync & async service -> sync & async client
void Do() & Task DoAsync()
->void Do() & Task DoAsync()
- sync service -> sync & async client
context.File
has async overloads for write, read and append- Commands in client applications are now async
- Add
[ManualTransaction]
to prevent automatic db connection and transaction. This switch will improve performance when a service makes an external http request before doing db related work or no db related work at all.- Transaction is still available using
context.WithNewTransaction
.
- Transaction is still available using
- Gazel CLI now is released as a dotnet tool. Run
dotnet tool install -g Gazel.Cli
to use it.
Breaking Changes
- Client Api doesn't have
CurrentThread
request scope any more, useAsyncLocal
instead - Gazel CLI is not in Chocolatey any more, but previous releases are still there.
Improvements
- Gazel documentation redesigned and restructured completely
- NuGet package dependencies are fixed, they are listed as package dependency
instead of including external .dll files
- Gazel.Configuration now depends on Gazel
- Removed unnecessary dependency to
System.ServiceModel.Primitives
- CI/CD is migrated from an internal Jenkins server to GitHub Actions
Bugfixes
- Projects were missing several dependencies, fixed
- Gazel.Cli wasn't working on dotnet tool, fixed
v5.1.0
Features
- Business services can now be
async
Breaking Changes
IApiGenerationConfiguration
is renamed toIRestApiConfiguration
Improvements
- Rest Templates are completely refactored!
- Accepts different naming conventions for route, query, form and body parameters
- Has additional default routes
- Offers a simpler configuration for custom routing, status code mapping and more
- Logs all route configurations on start
v5.0.0
Features
- Gazel now supports .NET 5!
- New commands to Gazel CLI
- codegen: With
g codegen
you can generate source code instead of generating an assembly (.dll) file - schemagen: With
g schemagen
you can save schema file to a.json
fileapigen
andcodegen
has--schema-file
option to be able to use a local schema file
- codegen: With
- Gazel CLI now accepts a
backup-uri
to use when givenuri
fails during apigen or codegen or schemagen
Breaking Changes
- .NET Framework is not supported any more
- Below features are removed and not supported any more;
- ASP.NET MVC, WCF, WebApi, Vue are not supported any more
- WebService namespace is removed completely, Rest template is in RestApi namespace
- IdObfuscation is removed completely
- Quartz Scheduler is removed completely
- Report feature is removed completely
- Stub feature is removed completely
IServiceResultData
is removedTriState
removed, usebool?
insteadIOnBeginRequestConfiguration
andIOnEndRequestConfiguration
are removed. Use ASP.NET CoreIHostApplicationLifetime
object to register begin end events;
- Various renamings are done;
Configurers
namespace is renamed toFeatures
. Changing your usings inGlobal
class of your application will be sufficient.HttpApplication
is renamed toWebApplication
WebServiceApplication
is renamed toApiApplication
IWebServiceConfiguration
is renamed toIApiGenerationConfiguration
FromConfig
helpers in application classes are renamed toSetting
TokenBased
authentication is renamed toBearerToken
NoAuthentication
authentication is renamed toAllowAnonymous
NoAuthorization
authorization is renamed toAllowAll
ModuleConfiguration
is renamed toBusinessLogicConfiguration
along with its configurer class.
- Unit test projects does not use
app.config
any more, you should set root namespace usingConfig.RootNamespace
in a static constructor of your test base or test fixture classes. - RabbitMQ implementation does not feed a log table (e.g.
QueuedServiceRequestLog
) any more Configurer
now only returnsIClientContext
, you have to use it to create a client api class- Kernel registration logs are not appended any more. To see them again, change
log level of
Gazel.Configuration.Layers.IoCLayer
logger toDebug
. - Web service packages does not include a virtual
Ping
method any more
Improvements
ISettings
is registered to Kernel immediately so thatConfig
helper functions (formerFromConfig
) can get settings value during configuration in Global files.- Application assemblies can now be overridden using
applicationAssemblies
parameter in application builders,Assemblies
class orApplicationAssemblies
property in application base classes.
Bugfixes
- Nullable parameters were not supported as inputs, fixed
Older Releases
v1.2.2
Improvements
- Fixes an issue that caused a serious slow down on application init
Bugfixes
- Client api generation from local was not working because of missing assemblies, fixed
- Mvc hosts with client api was not starting, fixed
v1.2.1
Features
apigen
now can create client api from bin directory
Improvements
apigen
now shows compile errors in console output
Bugfixes
apigen
was not deleting temp folder when an error occurs, fixed
v1.2.0
Features
- "Gazel CLI" is introduced as a global tool (
g
). Install it throughchoco install gazel-cli
. CommandLineApplication
is introduced as a new application type which supports verb and option parsing via CommandLineParserIComponentModelBuilderConfiguration
is introduced to enable modifying default registration of components.LifestyleContributor
is implemented to enable changing registered lifestyle of a component. (e.g.cmb.SetLifeStyle(of: typeof(SomeClass), to: LifestyleType.Singleton)
)OrderedInterceptorContributor
is implemented to allow ordered interceptors from "Castle.Windsor".
ColoredLevelConsoleAppender
is added to allow beautiful log messages to console.
Breaking Changes
apigen.exe
is removed from "Gazel.Client" package and moved to "Gazel CLI" as a sub command (e.g.g apigen http://api.project.com -n MyCompany.MyProject
)apigen
options are redesigned completelysingleton
parameter ofTestBase.CreateMock
is renamed to@override
DateTimeRange.DateTimeFormat
field is renamed toDATE_TIME_FORMAT
and made private, you can useConstants.DATE_TIME_FORMAT
instead- Default color style is
ColorStyle.Gray
for MVC Public Theme
Improvements
- Missing XML documentation of Gazel.System classes are completed
- A lot of refactoring was made to improve code readibility
- Nuget specs are revised to conform to best practices
ColorStyle.Gray
added to MVC Public Theme- Added FileSystem feature to MVC applications
Bugfixes
- SQLite.Interop assemblies will be added with CopyIfNewer set to TRUE
- 3rd party library XML documentation files are included in nuget packages
- MVC DecimalPointOption.Always was not working correctly, fixed
v1.1.9
Bugfixes
- SessionInfo columns are excluded from CustomerUserType naming convention like audit columns.
Improvements
- In order to store session information like AuditInfo on entities, SessionInfo is added. IWithSession and IAuditableWithSession interfaces are added to enforce user to use as properties.
v1.1.7
Improvements
- Npgsql is added to Gazel.Configuration in order to support PostgreSQL.
v1.1.6
Improvements
- Instead of fetching fonts from google, Google Fonts in gazel.css are embeded into Gazel.Configuration.Mvc
- Submodules of Acelang are embeded into Gazel.Configuration.Mvc
v1.1.4
Bugfixes
- The
maxResultLengthInBytes
specified using theServiceConfigurer
in Global.asax forGateWay Application
is not set on theJavaScriptSerializer.MaxJsonLength
property. It gives "The length of the string exceeds the value set on the maxJsonLength property" error message, fixed.
v1.1.3
Library Upgrades
- Upgraded Routine 0.8.1 to 0.8.2
v1.1.2
Bugfixes
- The
maxResultLengthInBytes
specified using theServiceConfigurer
in Global.asax is not set on theJavaScriptSerializer.MaxJsonLength
property. It gives "The length of the string exceeds the value set on the maxJsonLength property" error message, fixed.
v1.1.1
Bugfixes
- License keys with
MvcApplication
were not working underServiceApplication
, fixed.
Library Upgrades
- Upgraded Routine 0.8.0 to 0.8.1
v1.1.0
Features
- Nuget - The Nuget packages were arranged.
- Created
Gazel.Configuration.Mvc
NuGet package to support MVC web applications on .NET Framework.
- Created
Breaking Changes
- MVC web application support has been removed from
Gazel.Configuration
. It has been moved to the newGazel.Configuration.Mvc
NuGet package. - Auto UI support has been removed from
Gazel.Configuration
. It has been moved to the newGazel.Configuration.Mvc
NuGet package. Microsoft.AspNet.Mvc
NuGet package has been removed from bothGazel
andGazel.Configuration
.Newtonsoft.Json
library has been removed fromGazel.Configuration
NuGet package.
Improvements
- Added json serializer support for
Middleware Application
Library Upgrades
- Upgraded Routine 0.7.8.37795 to 0.8.0
v1.0.2
Library Upgrades
- Upgraded RabbitMQ.Client 5.1.0 to 5.1.2
- Upgraded Castle.Windsor 5.0.0 to 5.0.1
- Upgraded Castle.Facilities.AspNet.SystemWeb 5.0.0 to 5.0.1
- Upgraded Castle.WcfIntegrationFacility 5.0.0 to 5.0.1
- Upgraded Castle.LoggingFacility 5.0.0 to 5.0.1
- Upgraded Moq 4.12.0 to 4.13.1
v1.0.1
Bugfixes
- When context session is overriding, if an exception occurs in action, context session is not restored to previous value, fixed.
- When an MVC application is started, action filters on UI modules are not automatically registered in kernel, fixed.
- When a HTTP post request with content type
application/x-www-form-urlencoded
, REST api is throwingSystem.StackOverflowException
, fixed.
Improvements
- After NHibernate 5.1.2 upgrade, if an entity is mapped with explicit
implementation of an interface, when accessing the
Id
property via an interface, it returnsId
property of a proxy entity. That is expected behavior. But, NHibernateDefaultProxyFactory
(obsoleted) was not doing this. It can still be enabled usinguseDefaultProxyFactory
parameter ofDatabaseConfigurer
from Global.asax. System.Threading.Tasks.Extensions
library has been added inGazel.Configuration
NuGet package.
Library Upgrades
- Upgraded Castle.Core 4.3.1 to 4.4.0
- Upgraded Castle.Core-log4net 4.3.1 to 4.4.0
- Upgraded NUnit 3.11.0 to 3.12.0
- Upgraded Newtonsoft.json 12.0.1 to 12.0.2
- Upgraded Moq 4.2.1402.2112 to 4.12.0
- Upgraded System.Data.SQLite.Core 1.0.110 to 1.0.111
v1.0.0-rc3
Bugfixes
RemoteSyslogAppender
doesn't properly handle newline in log message, fixed.
v1.0.0-rc2
Bugfixes
- Fixed issue of not overriding what has been injected to already created objects with new mock objects when singleton is true create mock.
v1.0.0-rc1
Features
- RabbitMQ now supports sending messages directly without implementing
IMessageManager
. It can be enabled usingmessageDeliveryStrategy
parameter ofMessageQueueConfigurer.RabbitMq
from Global.asax. - Added json file localizer and custom localizer support. They can be
configured using
LocalizationFeature
from Global.asax. - Sql reserved keywords can now be specified by configuring from Global.asax.
- Documentation - Added PlantUML plugin inside Gazel documentation.
- Documentation - Security and web service features have been published.
Breaking Changes
- .Net Framework 4.0 support has been removed.
- .Net Framework 4.5 is changed to 4.5.2.
Castle.FactorySupportFacility
library has been removed fromGazel.Configuration
nuget package.- For primary key, naming convention following
EntityName+Id
has been removed. It can now be specified usingIMappingConfiguration
implementation.
Improvements
Castle.Facilities.AspNet.SystemWeb 5.0.0
,Remotion.Linq 2.1.2
,Remotion.Linq.EagerFetching 2.1.0
andAntlr3.Runtime 3.5.1
libraries have been added inGazel.Configuration
nuget package.- NuGet package have been changed to provide support for .Net Framework 4.5.2 version.
- Documentation - Architecture feature has been updated. (see: https://docs.gazel.io/architecture.html)
Library Upgrades
- Upgraded Castle.Windsor 3.2.1 to 5.0.0
- Upgraded Castle.Core 3.2.0 to 4.3.1
- Upgraded Castle.Core-log4net 3.2.0 to 4.3.1
- Upgraded Castle.LoggingFacility 3.2.0 to 5.0.0
- Upgraded Castle.WcfIntegrationFacility 3.2.0 to 5.0.0
- Upgraded Common.Logging 2.1.2 to 3.4.1
- Upgraded log4net 1.2.10 to 2.0.8
- Upgraded NUnit 2.6.3 to 3.11.0
- Upgraded Quartz 2.2.4 to 3.0.7
- Upgraded RabbitMQ.Client 3.5.7 to 5.1.0
Upgrades specific for .Net Framework 4.7
- Upgraded NHibernate 3.3.5.4000 to 5.1.2
- Upgraded NHibernate.Caches.SysCache 3.3.3.4000 to 5.4.0
- Upgraded FluentNHibernate 1.4.0 to 2.1.2
v0.98.5
Features
- For unhandled exceptions, request header and body can now be included in log
message. It can be specified using
UnhandledExceptionMessage
method ofLoggingFeature
in Global.asax. - Context session can be changed using the
IModuleContext.OverrideSession
implementation at runtime.
Bugfixes
- Fixed a bug with min value and max value on money data type for MS SQL Server. Money data type now correctly handles them.
- Incorrect naming of data contract namespace in the WSDL which is generated by
WCF data service, fixed. The namespace of data contract can now be specified
using
WebServiceConfiguration
in Global.asax.
Improvements
- Added CORS feature support for Mvc Service Client Application
- Changed the execute order of
Audit
andSecure
configuration interceptions. - Added
System.Web.Http
library inGazel.Configuration
nuget package.
v0.98.4
Features
- Added following optional parameters allow you to use linq extension methods
in your queries. (see:
https://docs.gazel.io/features/queries.html)
take
skip
orderBy
orderByDescending
any
Improvements
- Service - Add support for refresh an entity's data from database.
(
IRepository<T>.Refresh(T entity)
) - System - Added a new system type that truncates long text. (see: https://docs.gazel.io/value-types/CodeContent.html)
- Changed as protected accessibility of
BuildQuery
method inQuery<T>
v0.98.2
Features
- NuGet package have been changed to provide support for .Net Framework 4, 4.5, 4.6 and 4.7 versions.
- Service - Root namespace is now detected automatically.
- The assembly prefix to which Global.asax belongs is detected as the root namespace.
- The root namespace can be specified by configuring it from Global.asax.
- Documentation - The website of the Gazel has been published. (see: http://gazel.io)
- Documentation - A draft version documentation has been published. (see: http://docs.gazel.io)
- Tools - An online tool for creating an empty project has been developed. (see: http://gazel.io/create-project)
- Web - Dropdown component for Enums was created.
- It can be used as multiple choice.
- Enum's text values are passed to localization and loaded into dropdown.
- The icon and color for each item of the dropdown can be specified.
- Web - The UI component of ContentValueType was created.
Bugfixes
- Web - The last 2 hours, today and yesterday in the DateTimeRangePicker had incorrect date and time information, fixed.
- Web - If the form is posted to the Nullable MoneyRange component without any values entered, the service returned the default MoneyRange value instead of null, fixed.
Improvements
- Nuget - The Nuget packages were arranged.
- Gazel package is now a single package. Dependencies of Gazel comes within Gazel to simplify nuget packages in projects.
- apigen package is renamed to Gazel.Client
- Apigen.exe has been removed from the project references. It was added under the Content folder in the project.
- When the Gazel.Client package is installed, the apigen.exe readme file is opened.
- Service - Exceptions within WithNewTransaction blocks were logged in ERROR level, changed to DEBUG.
- Web - The library was changed to mask Money UI component.
- For more information on the QueryMask library (see: https://igorescobar.github.io/jQuery-Mask-Plugin)
- Service - CreateDate and ModifyDate columns are now mapped to Timestamp.
- Web - Allows to select currency in Money
- If the default value is present, the default value is the currency. Otherwise, the Auto UI is retrieved from the configuration.
- It can be gotton from Global.asax.
- If the object has a property of type CurrencyCode, the currency value of the property is taken.
- Service - ResultCode information is added to fail and success logs.
- Web - Added 8-digit card number validation to CardNumber's UI component.
- Service - More options in database connection;
- Max pool size management for SqlServer connections
- Oracle, PostgreSQL and MySql support
- Web - Date constraint feature added to DatePicker UI component