Release Notes
Here you can find what's new in Gazel. We follow [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 or a breaking change 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 a new feature or breaking change, it is only a patch.
v8.0.1
Improvements
- In IsDomainType usage, the Regex instance created for each call has been edited to be singleton per regex pattern.
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Routine | 8.0.0 | 8.0.1 |
v8.0.0
Features
- Gazel now supports .NET 8!
- Gazel now supports C# 12!
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Routine | 6.1.3 | 8.0.0 |
v6.4.3
Bugfixes
- There was an error in the queue when deserializing if there was a list in the parameter while consuming the request, this has been fixed.
v6.4.2
Bugfixes
- Reading values from appsettings was causing error when registering a client api, fixed
v6.4.1
Bugfixes
- Client api registration phase order was causing problems, fixed
v6.4.0
Features
RequestScopeFeatureis added to provide more control over managing scopes and scope interceptors for layersIScopeProvideris introduced, which creates a decorated scope withOnDisposing()eventIModuleContextintroducesWithScope()method, which returns aScopedOperationobject for local service calls- e.g.
context.WithScope().Do(() => myManager.DoSomething())
- e.g.
Breaking Changes
MessageQueueFeatureis now replaced withMessageQueueLayerandQueuedServiceCallFeature. Its functionality is split beetween layer and feature accordinglyMessageQueueLayerprovides basic configuration and component registration forRabbitMQsetupQueuedServiceCallFeatureregisters a manager for publishing and consuming service call messages, sets up message queues per enqueued service, adds an interceptor for enqueueing service requests- This change requires below changes in
Program.cs;queuedServiceCall: c => c.MessageQueuePerService()should be used on top ofmessageQueue: c => c.RabbitMq().prefetchCount:,continueIfPublishingEventFails:anddisableLogMessageListener:options are now moved to the newqueuedServiceCall:featureEnqueueAttributeand message event listener interfaces are now moved toGazel.QueuedServiceCallnamespaceAddGazelServiceApplicationhas now two overloads- One without
messageQueue:andqueuedServiceCall:. To disable message queue, use this one. - One with a required
messageQueue:, and configurablequeuedServiceCall:
- One without
GetServiceInstanceextension is moved fromServiceInterceptionContexttoReferenceData- Using legacy
Startup.csfiles creates a problem withIMessageQueueConfigurationandRabbitMqManager.StartAsync()execution order, useProgram.csinstead.
Improvements
- Queued service calls are now consumed without making any extra internal http requests
context.Remotecalls for queued services now directly publishes message to queue server
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| FluentNHibernate | 3.2.0 | 3.2.1 |
| Microsoft.AspNetCore.ConcurrencyLimiter | 6.0.16 | 6.0.21 |
| MySql.Data | 8.0.33 | 8.1.0 |
| NHibernate | 5.4.2 | 5.4.6 |
| System.Data.SQLite | 1.0.117 | 1.0.118 |
v6.3.3
Improvements
- RabbitMq multiple host address was not supported, fixed.
- Settings are supporting
List<T>usage.
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Microsoft.Extensions.Logging | 6.0.0 | removed |
| Microsoft.Extensions.Logging.Abstractions | new | 6.0.4 |
When you use ILogger and ILoggerFactory in log processes, you will not be
affected by the library change here. If you are affected, you should switch
to using ILogger and ILoggerFactory.
v6.3.2
Improvements
- It wasn't possible to create stub instances for client api struct dto's, fixed.
v6.3.1
Improvements
UseRequestIdwas not correctly overridingRequestIdfor delayed remote calls, fixed
Bugfixes
RestApiLayerwas not applying config toSwaggerandSwaggerUI, fixed- Client Api rendering backward compatibility fixes;
- Constructor parameter or a property with
HiddenInClientApimarked type was causing error, fixed - Constructor parameters with different type but a matching name with a property was causing error, fixed
- Constructor overloads with parameters partially matching all properties was causing error, fixed
- Operations containing output only parameters or input only return type were not ignored or rendered properly, fixed
Robjectconstructor was not available for input only struct DTOs and causing error with schema generated from a previous version, fixedToRobjectmethod was not available for output only struct DTOs and causing error with schema generated from a previous version, fixed
- Constructor parameter or a property with
v6.3.0
Features
IApplicationCacheis introduced with a default implementation as a singleton that usesConcurrentDictionarybehind the scenes.- You can either inject
IApplicationCacheor access it throughIContext.Applicationproperty. - Similarly
IRequestCacheis also introduced for the sake of consistency. You can access it fromIModuleContext.Request.Cache.
- You can either inject
- Official swagger support has finally arrived. Gazel now automatically
configures
Swashbuckleto render a compatible swagger document. YourApiApplicationinstance will redirect to swagger ui by default where you can make calls to your API.- You may also add configuration using
swaggerOptions,swaggerGenOptionsandswaggerUIOptionsinrestApi:configuration as well as using the newISwaggerConfigurationinterface.
- You may also add configuration using
- Cors feature is reintroduced. This time using the standard
.AddCors()extension, with configurations forwarded directly to this extension. This is to make sure it is added in the correct order. - Records are now supported for creating DTOs as an alternative for struct DTOs
- You can now override request id for a remote call
- e.g.
context.Remote.On(this).UseRequestId(myRequestId).Do(() => ...)
- e.g.
Breaking Changes
- Rest api template was ignoring list parameters in service signature, fixed.
- If you wrote a custom route that matches a service with a list parameter,
you will need to change the service signature in your route configuration.
(e.g. Parameter signature for
List<string> nameshas changed fromString namestoList<String> names)
- If you wrote a custom route that matches a service with a list parameter,
you will need to change the service signature in your route configuration.
(e.g. Parameter signature for
- Type of the
Cacheproperty inIModuleContext.Requestis changed fromICachetoIRequestCache. This change should not cause any issues unless you have a custom implementation ofIModuleContext. - Nullable support for DTO structs resulted in the following breaking changes:
- Output DTOs are now rendered as struct in generated code for client api
- Object model of output nullable structs now has data
- Object model of input nullable structs now has initializer
Improvements
- When queued service request's token became invalid, it was causing error due to failing token validation before its execution. Queued service requests are no longer validated for a second time.
- When caching an async method result,
ICachewas caching theTaskobject itself instead of awaiting its result, fixed. - Auditable attribute now has
RequestIdproperty. Empty client request IDs are auto generated if set toRequestIdMode.Optional. - Rest api was generating list parameter names with
Listsuffix incorrectly, fixed. - Input structs were marked as
OutputData, fixed - Struct types, which can be used both as input and output DTO, were not rendered properly and caused compiler error when client code was generated, fixed
Bugfixes
- Remote invoking of an overloaded operation with minimum number of required
parameters was causing error, fixed.
- IRemoteServiceInvoker
Invokemethods with object parameters are now obsolete.
- IRemoteServiceInvoker
- When autocreating database tables for MySQL, precisions for
DateTimeandTimestamp, length forEncryptedString, precision and scale forMoney.Valuewere set incorrectly, fixed, - Nullable struct types were not recognized as value type and rendered as
string in RestApi, fixed
- All nullable structs are now marked as
HiddenInClientApiand not rendered in generated client code for backward compatibility
- All nullable structs are now marked as
- Unhandled messages were not included in log by default, fixed
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Basic.Reference.Assemblies.Net60 | 1.4.1 | 1.4.2 |
| FluentNHibernate | 3.1.0 | 3.2.0 |
| Microsoft.AspNetCore.ConcurrencyLimiter | 6.0.13 | 6.0.16 |
| Microsoft.CodeAnalysis.CSharp | 4.4.0 | 4.6.0 |
| MySql.Data | 8.0.32 | 8.0.33 |
| NHibernate | 5.4.0 | 5.4.2 |
| NHibernate.Caches.CoreMemoryCache | 5.8.0 | 5.9.0 |
| Npgsql | 6.0.8 | 6.0.9 |
| RabbitMQ.Client | 6.4.0 | 6.5.0 |
v6.2.0
Breaking Changes
includeProductNameInModuleNamesoption is renamed asincludeComponentNameInModuleNamesto conform to .NET project naming standardsinclude-product-nameoption in Gazel.Cli package also renamed asinclude-component-namefor the same reason
middleware:parameter inAddGazelMiddlewareApplicationwas unnecessary, removedAuditOptionis renamed toAuditFeature
Improvements
- Documentation is updated;
- Under Configurations section; Application Session, Business Logic, Command Line, Gateway, Http Header, Service, Service Client sections are completed
- Features / Audit is completed
- Options section is completed
Bugfixes
- Client Api was not loading application model from remote, fixed
v6.1.1
Improvements
contextis re-introduced as anObsoleteproperty inQueryto provide a more convenient transition to Gazel 6Contextproperty is also introduced inQueryto be used instead ofcontext
Bugfixes
- Generic domain types were causing stack overflow, fixed
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Routine | 6.1.2 | 6.1.3 |
v6.1.0
Features
- Concurrency limiter is now available in all web applications. You can
configure it via
concurrencyLimiter: c => c.AspNetCore(...). IEmbeddedResourceReaderinterface is added to be able to mock embedded resources during unit tests. You can access it fromIModuleContextandIContextviacontext.EmbeddedResourceproperty.
Breaking Changes
- Gazel.Client package is now removed and merged into Gazel.Configuration
- Everything under Gazel.Client is now under Gazel.ClientApi namespace
Configureris renamed asClientApiRegistrar- Former static
Configuremethod is replaced withRegisterinstance method
- Former static
Registermethod now directly registers generated client api interface instead of returningIClientContextRegisterClientApicomponent configuration overload is removed, useIComponentModelBuilderConfigurationto manipulate client api manager interface registrations- Caching in Gazel.Client was not being used, completely removed
httpContextAccessorconfiguration in Gazel.Client was unnecessary, removedrequestScopeconfiguration in Gazel.Client was unnecessary, removed
- Client api configuration classes are moved to
Featuresnamespace and renamed to fit their service application counterparts;appTokenis renamed asauthenticationexceptionis renamed asexceptionHandlingNotifierin exception handling is renamed asResultCodeProcessor
loggeris renamed asloggingsecurityis renamed assecureCall
SetSessionwas removed fromTestBase, useSetUpSessionIRestApiConfigurationis renamed toIRestTemplateConfiguration- Protected
contextfield inQueryclass is renamed to_context
Improvements
- Service application was not running when a dependent service is down, fixed
Gazel.Web.Headerwas causing conflicts when a backend uses client package, fixed- IApplicationScope now uses Concurrent Dictionary for access safety
ICodeCompilerConfigurationinterface is added toRestApiLayerfor enablingCodeCompilerconfiguration- Client Api now allows you to add custom service client and interception configurations using its new feature system
ICachedmany to one references are now lazy loaded to avoid unnecessary joins- NHibernate's core memory cache configuration is now available under
CacheConfigurer.CoreMemory
Bugfixes
- Proxy types were causing an error in service layer, fixed
- Request's
CultureInfosuch asar-SAwas causing incorrect date and time to string conversions, fixed
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Microsoft.AspNetCore.ConcurrencyLimiter | new | 6.0.13 |
| MySql.Data | 8.0.31 | 8.0.32 |
| NHibernate | 5.3.14 | 5.4.0 |
| Npgsql | 6.0.7 | 6.0.8 |
| Routine | 6.1.0 | 6.1.2 |
| System.Data.SQLite | 1.0.116 | 1.0.117 |
v6.0.0
Features
- Gazel now supports .NET 6!
- Gazel.Cli now accepts
--environmentoption to set environment for subprocess that generates schema from bin directory. ReadOnlyMemory<byte>is now supported in service input & output, client-api and db mapping.
Breaking Changes
- .NET 5 is not supported any more
HttpWebResponseinIGatewayConfigurationis changed toHttpResponseMessage.UseRoutineDevelopmentModeis removed from Routine. You can now access it viadevelopmentModeparameter inBusinessLogicConfigurer.Routine.businessLogic: c => c.Routine(developmentMode: builder.Environment.IsDevelopment())- Gazel
WebApplicationwas renamed asAspNetCoreApplication. IConfigurationwas renamed asIFeatureConfiguration.CustomWebApplicationwas removed. UseAspNetCoreApplicationinstead.CustomClientApplicationwas removed. UseClientApplicationinstead.- Obsolete application classes are removed.
GatewayApplication,MiddlewareApplication,ServiceApplicationandApiApplicationwere removed.- You can use corresponding extension methods such as
services.AddGazelServiceApplication.
- Obsolete methods are removed.
AddGazel<T>was removed, useAddGazel()instead.WebServicemethod inPatternsAndExtensionswas removed. UseApiPackageinstead.
X509Certificatewas removed. UseX509CertificateFromPemorX509CertificateFromP12File.- Support for one to one relation is removed.
- Implicit
Binarytobyte[]conversion is not supported any more. Either use explicit conversion, or useReadOnlyMemory<byte>as your variable type. ILogManager,ILoggerandLogLeveltypes are removed from Gazel package. You can useILoggerFactory,ILogger,ILogger<T>andLogLeveltypes fromMicrosoft.Extensions.Logging.Abstractions.LogLevelchanges should be migrated to prevent build problemsOffandInfobecameNoneandInformationrespectively.- Module name of
LogLevelin application model is changed fromGazeltoMicrosoft.
context.Loggeris now obsolete, you might injectILogger<T>orILoggerFactoryinstead.START_ORDER_MESSAGE_QUEUE,STOP_ORDER_MESSAGE_QUEUE,START_ORDER_LOGGERandSTART_ORDER_SERVICEare removed fromGazel.ConstantsfetchEageris removed fromCachedQueryandILookupWithCache.EnableLoggingandDisableLogginginTestBaseare renamed toEnableSqlLogsandDisableSqlLogsrespectively, because it was only enablingNHibernate.SQLlogger.
Improvements
Gazel.Systemproject is renamed asGazel.Primitivesand published under a separate nuget package asGazel.Primitives.- The namespaces of value types are still
System. This has not changed. Only the project name has been changed.
- The namespaces of value types are still
- Error was not logged during serialization of message data, fixed.
- Facade classes removed. Below interface extensions are refactored as default
interface methods;
LookupFacade->ILookup,ILookupWithCacheContextFacade->IContextModuleContextFacade->IModuleContextSettingsFacade->ISettingsStringToObjectConverterFacade->IStringToObjectConverterHasherFacade->IHasherRepositoryExtensions->IRepositorySignatureVerifierFacade->ISignatureVerifier
- Crypto feature was defaulted to
X509Storewhich is only available under windows. Now it is defaulted toAutoResolvewhich uses configuration to determine correct crypto option. - Data access layer now validates that every persistent class has a corresponding query class.
Binaryis optimized and made readonly by usingReadOnlyMemory<byte>as a backing field instead ofbyte[].ILogger<T>can now be injected instead of injecting factory and creating logger in construcctor.- Logger category of a business object included product name even if it was configured otherwise, fixed.
- MessageQueue feature is migrated to
IHostedService- Added additional logging to inform about rabbit mq connection and queues.
IOnStopConfigurationis now bound toApplicationStoppedinstead ofApplicationStopping.- Application model initialization is moved from
OnStarttoBuildphase - Structs under
Gazel.Primitivesare now readonly. - Instead of appending log to console
TestBasenow provides anIAppendermock throughMockSqlLogAppenderproperty. This way unit tests are allowed to verify if a certain sql is logged and executed or not.- You have to enable sql logs via
EnableSqlLogs()orBeginTest(enableSqlLogs: true).
- You have to enable sql logs via
Bugfixes
- Failing delayed remote calls were causing scopes to fail after committing a new transaction, fixed.
- New transaction on async void functions were not working due to incorrect overload resolution, fixed.
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Basic.Reference.Assemblies.Net50 | 1.2.4 | removed |
| Basic.Reference.Assemblies.Net60 | new | 1.4.1 |
| coverlet.msbuild | 3.1.2 | 3.2.0 |
| Microsoft.CodeAnalysis.CSharp | 4.2.0 | 4.4.0 |
| Microsoft.Extensions.Logging.Log4Net.AspNetCore | 6.0.0 | 6.1.0 |
| Microsoft.NET.Test.Sdk | 17.3.0 | 17.4.0 |
| MySql.Data | 8.0.30 | 8.0.31 |
| NHibernate | 5.3.12 | 5.3.14 |
| NHibernate.Caches.CoreMemoryCache | 5.7.0 | 5.8.0 |
| Npgsql | 6.0.6 | 6.0.7 |
| NUnit3TestAdapter | 4.2.1 | 4.3.0 |
| Routine | 0.9.6 | 6.1.0 |
| Stubble.Core | 1.9.3 | 1.10.8 |
| System.Data.SqlClient | 4.8.3 | 4.8.5 |
| System.Data.SQLite | 10.0.115.5 | 10.0.116 |
| System.Configuration.ConfigurationManager | 6.0.0 | 6.0.1 |
v5
v5.3.5
Bugfixes
- Fetch eager was causing extra select in cached queries of cached entities that has non-cached parent, fixed.
v5.3.4
Improvements
- Manual transaction check was not available within services. You can check if
current context has a main transaction via
context.TransactionalFactory.TransactionExists. WithTransactionis provided to ensure a transaction exists for operations that require a transaction.WithNewTransactionis to begin a new transaction even if there is one,WithTransactionbegins only if current context does not have a transaction.
Bugfixes
- Gazel.Cli was not working when generating from bin in windows, fixed.
- ConsumeMessage was not sending RunSystemCall header, fixed.
v5.3.3
Bugfixes
- Api assemblies were not included in application model, fixed.
v5.3.2
Bugfixes
- Interface mapping (
AnyStep) was causing an error during initialization when no implementation was found, fixed.
v5.3.1
Improvements
- Repository structure changes are made
SourceandTestfolders are renamed assrcandtest- Repository is renamed from
Gazeltogazel masterbranch is renamed tomain
Binarynow has implicit operators to & fromReadOnlyMemory<byte>as well asbyte[]
Library Upgrades
- Added package references that were reported to be missing
- Removed indirect package references
| Package | Old Version | New Version |
|---|---|---|
| Castle.LoggingFacility | 5.1.1 | 5.1.2 |
| Castle.Windsor | 5.1.1 | 5.1.2 |
| Castle.Windsor.Extensions.DependencyInjection | 5.1.1 | 5.1.2 |
| CommandLineParser | 2.8.0 | 2.9.1 |
| log4net | 2.0.12 | 2.0.15 |
| FluentNHibernate | 2.1.2 | 3.1.0 |
| Microsoft.CodeAnalysis.CSharp | 3.11.0 | 4.2.0 |
| Microsoft.Extensions.Logging.Log4Net.AspNetCore | 5.0.4 | 6.0.0 |
| Moq | 4.15.2 | 4.17.2 |
| MySql.Data | new | 8.0.30 |
| NHibernate | 5.2.7 | 5.3.12 |
| Npgsql | 5.0.0 | 6.0.6 |
| NUnit | 3.13.2 | 3.13.3 |
| RabbitMQ.Client | 5.1.2 | 6.4.0 |
| System.Buffers | new | 4.5.1 |
| System.Configuration.ConfigurationManager | 5.0.0 | 6.0.0 |
| System.Interaction.Async | new | 6.0.1 |
This is a patch release because packages are updated with the intention of not causing a breaking change, and new version is tested in all sample projects with no breaking or behavioral change observed.
However, if your application has a custom feature or configuration built with the previous version of these packages (especially NHibernate, FluentNHibernate and RabbitMQ.Client), it is possible for your application to encounter a breaking change and fail to build.
v5.3.0
Features
- Message queue event model is completely redesigned. You can now add listeners to message queue events to keep track of the status of messages.
Breaking Changes
MessageStatus,IMessage,IMessagesandIMessageManagertypes underGazel.MessageQueuenamespace are removed.SendMessageservice is removed fromRabbitMqQueueManagerclass. Now it hasConsumeMessageservice withbodyparameter.
Improvements
- Max daily count limit was obligatory in
AuditOption, now it is optional vialimitDailyCountparameter- Use
audit: c => c.Enabled(limitDailyRequest: false)to disable daily request limit
- Use
- Max daily count was creating new transaction each time it checks the limit, now it uses existing transaction when main transaction is available
- Add
intconstraint to all{id}route parameters in standard routes, now they are all{id:int} - Application assemblies access is now available in legacy
Globalusages - Polymorphic mapping (a.k.a.
AnyStep) now tolerates enum members without an implementation class
Bugfixes
- Not detecting route parameter constraints in route templates (e.g.
{id:int}), fixed - Nullable value types in Rest API were not rendered correctly, fixed
v5.2.0
Features
- Support for
async / awaithas arrived!asyncservices are marked asAsynccontext.Remotehas three different overloads- use
Doto make sync calls to sync services - use
await Doto make async calls to async services - use
await DoAsyncto make async calls to sync services
- use
context.WithNewTransactionhas three differrent overloads- use
Doto make sync transactions with sync functions - use
await Doto make async transactions with async functions - use
await DoAsyncto make async transaction with sync functions
- use
- Client Api generates
AsyncandSyncoverloads- 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.Filehas 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.Clito use it.
Breaking Changes
- Client Api doesn't have
CurrentThreadrequest scope any more, useAsyncLocalinstead - 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
IApiGenerationConfigurationis 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 codegenyou can generate source code instead of generating an assembly (.dll) file - schemagen: With
g schemagenyou can save schema file to a.jsonfileapigenandcodegenhas--schema-fileoption to be able to use a local schema file
- codegen: With
- Gazel CLI now accepts a
backup-urito use when givenurifails 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
IServiceResultDatais removedTriStateremoved, usebool?insteadIOnBeginRequestConfigurationandIOnEndRequestConfigurationare removed. Use ASP.NET CoreIHostApplicationLifetimeobject to register begin end events;
- Various renamings are done;
Configurersnamespace is renamed toFeatures. Changing your usings inGlobalclass of your application will be sufficient.HttpApplicationis renamed toWebApplicationWebServiceApplicationis renamed toApiApplicationIWebServiceConfigurationis renamed toIApiGenerationConfigurationFromConfighelpers in application classes are renamed toSettingTokenBasedauthentication is renamed toBearerTokenNoAuthenticationauthentication is renamed toAllowAnonymousNoAuthorizationauthorization is renamed toAllowAllModuleConfigurationis renamed toBusinessLogicConfigurationalong with its configurer class.
- Unit test projects does not use
app.configany more, you should set root namespace usingConfig.RootNamespacein a static constructor of your test base or test fixture classes. - RabbitMQ implementation does not feed a log table (e.g.
QueuedServiceRequestLog) any more Configurernow 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.IoCLayerlogger toDebug. - Web service packages does not include a virtual
Pingmethod any more
Improvement
ISettingsis registered to Kernel immediately so thatConfighelper functions (formerFromConfig) can get settings value during configuration in Global files.- Application assemblies can now be overridden using
applicationAssembliesparameter in application builders,Assembliesclass orApplicationAssembliesproperty in application base classes.
Bugfixes
- Nullable parameters were not supported as inputs, fixed
v1
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
apigennow can create client api from bin directory
Improvements
apigennow shows compile errors in console output
Bugfixes
apigenwas 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. CommandLineApplicationis introduced as a new application type which supports verb and option parsing via CommandLineParserIComponentModelBuilderConfigurationis introduced to enable modifying default registration of components.LifestyleContributoris implemented to enable changing registered lifestyle of a component. (e.g.cmb.SetLifeStyle(of: typeof(SomeClass), to: LifestyleType.Singleton))OrderedInterceptorContributoris implemented to allow ordered interceptors from "Castle.Windsor".
ColoredLevelConsoleAppenderis added to allow beautiful log messages to console.
Breaking Changes
apigen.exeis 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)apigenoptions are redesigned completelysingletonparameter ofTestBase.CreateMockis renamed to@overrideDateTimeRange.DateTimeFormatfield is renamed toDATE_TIME_FORMATand made private, you can useConstants.DATE_TIME_FORMATinstead- Default color style is
ColorStyle.Grayfor 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.Grayadded 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
maxResultLengthInBytesspecified using theServiceConfigurerin Global.asax forGateWay Applicationis not set on theJavaScriptSerializer.MaxJsonLengthproperty. It gives "The length of the string exceeds the value set on the maxJsonLength property" error message, fixed.
v1.1.3
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Routine | 0.8.1 | 0.8.2 |
v1.1.2
Bugfixes
- The
maxResultLengthInBytesspecified using theServiceConfigurerin Global.asax is not set on theJavaScriptSerializer.MaxJsonLengthproperty. 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
MvcApplicationwere not working underServiceApplication, fixed.
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Routine | 0.8.0 | 0.8.1 |
v1.1.0
Features
- Nuget - The Nuget packages were arranged.
- Created
Gazel.Configuration.MvcNuGet 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.MvcNuGet package. - Auto UI support has been removed from
Gazel.Configuration. It has been moved to the newGazel.Configuration.MvcNuGet package. Microsoft.AspNet.MvcNuGet package has been removed from bothGazelandGazel.Configuration.Newtonsoft.Jsonlibrary has been removed fromGazel.ConfigurationNuGet package.
Improvements
- Added json serializer support for
Middleware Application
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Routine | 0.7.8.37795 | 0.8.0 |
v1.0.2
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Castle.Facilities.AspNet.SystemWeb | 5.0.0 | 5.0.1 |
| Castle.LoggingFacility | 5.0.0 | 5.0.1 |
| Castle.WcfIntegrationFacility | 5.0.0 | 5.0.1 |
| Castle.Windsor | 5.0.0 | 5.0.1 |
| Moq | 4.12.0 | 4.13.1 |
| RabbitMQ.Client | 5.1.0 | 5.1.2 |
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
Idproperty via an interface, it returnsIdproperty of a proxy entity. That is expected behavior. But, NHibernateDefaultProxyFactory(obsoleted) was not doing this. It can still be enabled usinguseDefaultProxyFactoryparameter ofDatabaseConfigurerfrom Global.asax. System.Threading.Tasks.Extensionslibrary has been added inGazel.ConfigurationNuGet package.
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Castle.Core | 4.3.1 | 4.4.0 |
| Castle.Core-log4net | 4.3.1 | 4.4.0 |
| Moq | 4.2.1402.211 | 4.12.0 |
| Newtonsoft.json | 12.0.1 | 12.0.2 |
| NUnit | 3.11.0 | 3.12.0 |
| System.Data.SQLite.Core 1.0.110 | 1.0.110 | 1.0.111 |
v1.0.0-rc3
Bugfixes
RemoteSyslogAppenderdoesn'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 usingmessageDeliveryStrategyparameter ofMessageQueueConfigurer.RabbitMqfrom Global.asax. - Added json file localizer and custom localizer support. They can be
configured using
LocalizationFeaturefrom 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.FactorySupportFacilitylibrary has been removed fromGazel.Configurationnuget package.- For primary key, naming convention following
EntityName+Idhas been removed. It can now be specified usingIMappingConfigurationimplementation.
Improvements
Castle.Facilities.AspNet.SystemWeb 5.0.0,Remotion.Linq 2.1.2,Remotion.Linq.EagerFetching 2.1.0andAntlr3.Runtime 3.5.1libraries have been added inGazel.Configurationnuget package.- NuGet package have been changed to provide support for .Net Framework 4.5.2 version.
- Documentation - Architecture feature has been updated. (see: architecture )
Library Upgrades
| Package | Old Version | New Version |
|---|---|---|
| Castle.Core | 3.2.0 | 4.3.1 |
| Castle.Core-log4net | 3.2.0 | 4.3.1 |
| Castle.LoggingFacility | 3.2.0 | 5.0.0 |
| Castle.WcfIntegrationFacility | 3.2.0 | 5.0.0 |
| Castle.Windsor | 3.2.1 | 5.0.0 |
| Common.Logging | 2.1.2 | 3.4.1 |
| log4net | 1.2.10 | 2.0.8 |
| NUnit | 2.6.3 | 3.11.0 |
| Quartz | 2.2.4 | 3.0.7 |
| RabbitMQ.Client | 3.5.7 | 5.1.0 |
Upgrades specific for .Net Framework 4.7
| Package | Old Version | New Version |
|---|---|---|
| FluentNHibernate | 1.4.0 | 2.1.2 |
| NHibernate | 3.3.5.4000 | 5.1.2 |
| NHibernate.Caches.SysCache | 3.3.3.4000 | 5.4.0 |
v0
v0.98.5
Features
- For unhandled exceptions, request header and body can now be included in log
message. It can be specified using
UnhandledExceptionMessagemethod ofLoggingFeaturein Global.asax. - Context session can be changed using the
IModuleContext.OverrideSessionimplementation 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
WebServiceConfigurationin Global.asax.
Improvements
- Added CORS feature support for Mvc Service Client Application
- Changed the execute order of
AuditandSecureconfiguration interceptions. - Added
System.Web.Httplibrary inGazel.Configurationnuget package.
v0.98.4
Features
- Added following optional parameters allow you to use linq extension methods
in your queries. (see: Conventions / Queries )
takeskiporderByorderByDescendingany
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.
- Changed as protected accessibility of
BuildQuerymethod 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.
- Documentation - A draft version documentation has been published.
- Tools - An online tool for creating an empty project has been developed. (see: Setup / Create A Solution )
- 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