diff --git a/docs/source/License-configuration.md b/docs/source/License-configuration.md index 0c46846222..097fc61663 100644 --- a/docs/source/License-configuration.md +++ b/docs/source/License-configuration.md @@ -30,6 +30,47 @@ There is no other license enforcement besides log messages. No central license s The log messages are logged using standard `Microsoft.Extensions.Logging` loggers under the category name `LuckyPennySoftware.AutoMapper.License`. +### Multiple License Messages + +If you see duplicate license log messages at startup, this is typically caused by AutoMapper being registered or configured more than once in your application. + +#### Using `AddAutoMapper` (Microsoft.Extensions.DependencyInjection) + +Calling `AddAutoMapper` multiple times in the same `IServiceCollection` is safe. After the first call registers `IMapper`, subsequent calls are ignored and no additional license validation occurs: + +```c# +services.AddAutoMapper(cfg => { cfg.LicenseKey = "key"; }); +services.AddAutoMapper(cfg => { /* ignored -- IMapper already registered */ }); +``` + +If you are calling `AddAutoMapper` in multiple places (e.g. in modular startup code), each call still only results in a single `MapperConfiguration` singleton and a single license log message. + +#### Using `MapperConfiguration` Directly + +When creating `MapperConfiguration` instances manually, each instance performs its own license validation, producing a separate log message: + +```c# +// Each of these logs a license message – avoid creating multiple instances +var config1 = new MapperConfiguration(cfg => { cfg.LicenseKey = "key"; }, loggerFactory); +var config2 = new MapperConfiguration(cfg => { cfg.LicenseKey = "key"; }, loggerFactory); +``` + +To avoid duplicate messages, create and reuse a single `MapperConfiguration` instance for the lifetime of your application, typically registered as a singleton: + +```c# +// Create once and reuse +var config = new MapperConfiguration(cfg => { cfg.LicenseKey = "key"; }, loggerFactory); +var mapper = new Mapper(config); +``` + +#### Suppressing Duplicate License Messages + +If you intentionally have multiple configurations (for example in integration tests or modular scenarios), you can silence duplicate license log messages by filtering the log category: + +```csharp +builder.Logging.AddFilter("LuckyPennySoftware.AutoMapper.License", LogLevel.None); +``` + ### Client Redistribution Scenarios In the case where AutoMapper is used on a client, including: