January 24, 2025

Layered configuration of a particular IOptions in .NET

There are layers in global IConfiguration like JSON, Environment variables etc. But it is possible to leverage a similar approach to the specific IOptions configuration:

services.AddOptions<SpecificOptions>()
.Configure<IOptions<GeneralOptions>>((so, go) =>
{
so.SpecificUrl = go.Value.BaseUrl;
})
.Bind(configuration.GetSection("SpecificOptions"));

Here an instance of SpecificOptions configured from gathering values from some other options as a first layer and then from a configuration section as a second one. Setting null in SpecificOptions does not override first Configure call, but if Configure would be the 2nd layer, it would override value with null, so proper null checks should be applied if necessary.

October 12, 2023

How to change default locale in Angular

Import locale app.module.ts:

import localeEngb from '@angular/common/locales/en-GB';

Then call registerLocaleData before @NgModule

registerLocaleData(localeEngb);

Provide LOCALE_ID in providers section:

providers: [
    {
      provide: LOCALE_ID,
      useValue: 'en-GB'
    },


August 28, 2023

Testing with ILogger and container in .NET core

In order to use NullLogger with container, next configuration should be added:

services.AddLogging(l => l.AddProvider(NullLoggerProvider.Instance));


July 24, 2022

Useful libraries (updating)

BenchmarkDotNet - https://www.nuget.org/packages/BenchmarkDotNet - transforms methods into benchmarks.

ASP.NET Core OData - https://www.nuget.org/packages/Microsoft.AspNetCore.OData - create OData endpoints.

NBomber - https://www.nuget.org/packages/NBomber - load testing framework.

Verify - https://github.com/VerifyTests/Verify - assertion of complex data models and documents.

OpenIddict - https://www.nuget.org/packages/OpenIddict - OAuth 2.0/OpenID Connect flows implementation.

CsvHelper - https://www.nuget.org/packages/CsvHelper - reading and writing CSV files.

Pulumi - https://www.pulumi.com - cloud infrastructure as code using programming language.

Quartz.NET - https://www.nuget.org/packages/Quartz - job scheduling system.

AutoFixture - https://www.nuget.org/packages/AutoFixture - generates values for anonymous variables in tests.

MediatR - https://www.nuget.org/packages/MediatR - message dispatching via C# generic variance.

System.Linq.Async - https://www.nuget.org/packages/System.Linq.Async - LINQ extensions for IAsyncEnumerable.

NLog - https://www.nuget.org/packages/NLog - logging framework.

NSubstitute - https://www.nuget.org/packages/NSubstitute - mocking library



January 17, 2022

Git comment char

When git is integrated with an issue tracker that can link commit to a particular issue '#' - hash sign sometimes is used to provide issue number (for example #1234). But at the same time hash sign is used as a comment symbols in git rebase change commit message. So, comment is ignored. To overcome this it is possible to change default comment char in git locally:

git config core.commentchar ";"

January 14, 2022

WinDbg documentation

 Comprehensive documentation of WinDb and other windows debugging tools https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/

December 28, 2021

git alias to pull forward only

 Simple git alias that does pull --ff-only. It is possible to configure git pull to do --ff-only by default - https://blog.sffc.xyz/post/185195398930/why-you-should-use-git-pull-ff-only-git-is-a
but I prefer to have default settings for commands to have fine-grained control over the operations.

Open .gitconfig (usually it is in c:/users/YOUR-USER/.gitconfig) and add an alias:

[alias]
up = !git pull --ff-only