Override mode fix

This commit is contained in:
Marco 2025-07-28 14:45:03 +02:00
commit 12d1bd57dc
7 changed files with 249 additions and 181 deletions

View file

@ -680,6 +680,9 @@ public class ImageCreatorSharp(PicSettings picSettings, ILogger<ImageCreatorShar
private void SalvaFoto(Bitmap imgOutputBig, ImageState imgState, ImageFormat thisFormat)
{
var fileName = Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig);
using var image1Stream = new MemoryStream();
if (picSettings.FotoGrandeDimOrigina == false)
{
@ -699,52 +702,60 @@ public class ImageCreatorSharp(PicSettings picSettings, ILogger<ImageCreatorShar
using var g2 = Image.FromStream(image1Stream);
imgState.ThumbSizeBig = g2.Width > g2.Height ? NewthumbSize(g2.Width, g2.Height, picSettings.LarghezzaBig, "Larghezza") : NewthumbSize(g2.Width, g2.Height, picSettings.AltezzaBig, "Altezza");
using var imgOutputBig2 = new Bitmap(g2, imgState.ThumbSizeBig.Width, imgState.ThumbSizeBig.Height);
if (thisFormat.Equals(ImageFormat.Jpeg))
SalvaImmagineCustomQuality(imgOutputBig2, Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), picSettings.JpegQuality);
if (!picSettings.OverwriteFiles && File.Exists(fileName))
{
logger.LogInformation("Saltata foto {FileName}, esiste", fileName);
}
else
imgOutputBig2.Save(Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), thisFormat);
//imgOutputBig2.Dispose();
//imgOutputBig.Dispose();
//g2.Dispose();
{
if (thisFormat.Equals(ImageFormat.Jpeg))
SalvaImmagineCustomQuality(imgOutputBig2, fileName, picSettings.JpegQuality);
else
imgOutputBig2.Save(fileName, thisFormat);
}
}
else
{
//
if (thisFormat.Equals(ImageFormat.Jpeg))
SalvaImmagineCustomQuality(imgOutputBig, Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), picSettings.JpegQuality);
if (!picSettings.OverwriteFiles && File.Exists(fileName))
{
logger.LogInformation("Saltata foto {FileName}, esiste", fileName);
}
else
imgOutputBig.Save(Path.Combine(imgState.DestDir.FullName, imgState.NomeFileBig), thisFormat);
//imgOutputBig.Dispose();
{
if (thisFormat.Equals(ImageFormat.Jpeg))
SalvaImmagineCustomQuality(imgOutputBig, fileName, picSettings.JpegQuality);
else
imgOutputBig.Save(fileName, thisFormat);
}
}
image1Stream.Seek(0, SeekOrigin.Begin);
if (!picSettings.CreaMiniature) return;
if (!picSettings.AggiungiScritteMiniature) return;
using var g1 = picSettings.FotoGrandeDimOrigina ? (Image)imgOutputBig.Clone() : Image.FromStream(image1Stream);
//if (_picSettings.FotoGrandeDimOrigina == false)
// g1 = Image.FromStream(image1Stream);
////g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig));
//else
// g1 = (Image)imgOutputBig.Clone();
//g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, NomeFileBig));
using Bitmap imgOutputSmall = new Bitmap(g1, imgState.ThumbSizeSmall.Width, imgState.ThumbSizeSmall.Height);
using var imgOutputSmall = new Bitmap(g1, imgState.ThumbSizeSmall.Width, imgState.ThumbSizeSmall.Height);
if (string.Equals(picSettings.DirectorySorgente, picSettings.DirectoryDestinazione, StringComparison.OrdinalIgnoreCase))
imgState.NomeFileSmall = imgState.NomeFileSmall.Substring(0, imgState.NomeFileSmall.Length - 4) + picSettings.Codice + imgState.NomeFileSmall.Substring(imgState.NomeFileSmall.Length - 4);
//
if (thisFormat.Equals(ImageFormat.Jpeg))
SalvaImmagineCustomQuality(imgOutputSmall, Path.Combine(imgState.DestDir.FullName, imgState.NomeFileSmall), picSettings.JpegQualityMin);
var tnFileName = Path.Combine(imgState.DestDir.FullName, imgState.NomeFileSmall);
if (!picSettings.OverwriteFiles && File.Exists(tnFileName))
{
logger.LogInformation("Saltata miniatura foto {TnFileName}, esiste", tnFileName);
}
else
imgOutputSmall.Save(Path.Combine(imgState.DestDir.FullName, imgState.NomeFileSmall), thisFormat);
//imgOutputSmall.Dispose();
//g1.Dispose();
//if (File.Exists(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig)))
// File.Delete(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig));
{
if (thisFormat.Equals(ImageFormat.Jpeg))
SalvaImmagineCustomQuality(imgOutputSmall, tnFileName, picSettings.JpegQualityMin);
else
imgOutputSmall.Save(tnFileName, thisFormat);
}
}
private void SalvaImmagineCustomQuality(Bitmap imageToSave, string nomeFileFinale, long quality)

View file

@ -64,4 +64,5 @@ public class PicSettings
public bool FotoRuotaADestra { get; set; } = false;
public bool FotoRuotaASinistra { get; set; } = false;
public string TempMinText { get; set; } = string.Empty;
public bool OverwriteFiles { get; set; } = false;
}

View file

@ -77,6 +77,18 @@ namespace ImageCatalog_2
}
}
private bool _overwriteImages;
public bool OverwriteImages
{
get => _overwriteImages;
set
{
_overwriteImages = value;
NotifyPropertyChanged();
}
}
private bool _uiEnabled = true;
public bool UiEnabled

View file

@ -617,6 +617,7 @@ namespace ImageCatalog
//
// chkSovrascriviFile
//
chkSovrascriviFile.DataBindings.Add(new Binding("Checked", bindingSource1, "OverwriteImages", true, DataSourceUpdateMode.OnPropertyChanged));
chkSovrascriviFile.AutoSize = true;
chkSovrascriviFile.Location = new Point(21, 94);
chkSovrascriviFile.Margin = new Padding(4, 5, 4, 5);

View file

@ -128,7 +128,7 @@ public partial class MainForm
private ConcurrentBag<string> _results;
private void setDefaults()
private void SetDefaults()
{
//txtSorgente.Text = "";
Model.SourcePath = string.Empty;
@ -205,7 +205,7 @@ public partial class MainForm
{
bindingSource1.DataSource = Model;
Application.EnableVisualStyles();
setDefaults();
SetDefaults();
// /* TODO ERROR: Skipped IfDirectiveTrivia */
// AllocConsole();
// /* TODO ERROR: Skipped EndIfDirectiveTrivia */
@ -318,77 +318,77 @@ public partial class MainForm
SaveFileDlg.Filter = "Setup (*.xml)|*.xml|All valid files (*.*)|*.*";
SaveFileDlg.FilterIndex = 0;
SaveFileDlg.RestoreDirectory = true;
if (DialogResult.OK == SaveFileDlg.ShowDialog())
if (DialogResult.OK != SaveFileDlg.ShowDialog()) return;
var ilNome = SaveFileDlg.FileName;
_parametriSetup.NomeFileSetup = ilNome;
_parametriSetup.AggiornaParametro("DirSorgente", Model.SourcePath);
_parametriSetup.AggiornaParametro("DirDestinazione", Model.DestinationPath);
_parametriSetup.AggiornaParametro("DirSottoDirectory", chkAggiornaSottodirectory.Checked);
_parametriSetup.AggiornaParametro("DirDividiDestinazione", chkCreaSottocartelle.Checked);
_parametriSetup.AggiornaParametro("DirDividiNumFile", txtFilePerCartella.Text);
_parametriSetup.AggiornaParametro("DirDividiSuffisso", txtSuffissoCartelle.Text);
_parametriSetup.AggiornaParametro("DirDividiNumCifre", txtCifreContatore.Text);
if (rdbNumProgressiva.Checked == true)
{
string IlNome = SaveFileDlg.FileName;
_parametriSetup.NomeFileSetup = IlNome;
_parametriSetup.AggiornaParametro("DirSorgente", Model.SourcePath);
_parametriSetup.AggiornaParametro("DirDestinazione", Model.DestinationPath);
_parametriSetup.AggiornaParametro("DirSottoDirectory", chkAggiornaSottodirectory.Checked);
_parametriSetup.AggiornaParametro("DirDividiDestinazione", chkCreaSottocartelle.Checked);
_parametriSetup.AggiornaParametro("DirDividiNumFile", txtFilePerCartella.Text);
_parametriSetup.AggiornaParametro("DirDividiSuffisso", txtSuffissoCartelle.Text);
_parametriSetup.AggiornaParametro("DirDividiNumCifre", txtCifreContatore.Text);
if (rdbNumProgressiva.Checked == true)
{
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Progressiva");
}
else
{
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Files");
}
_parametriSetup.AggiornaParametro("MiniatureCrea", CheckBox1.Checked);
_parametriSetup.AggiornaParametro("MiniatureSuffisso", TextBox3.Text);
_parametriSetup.AggiornaParametro("MiniatureAltezza", TextBox5.Text);
_parametriSetup.AggiornaParametro("MiniatureLarghezza", TextBox6.Text);
_parametriSetup.AggiornaParametro("MiniatureAddScritta", RadioButton3.Checked);
_parametriSetup.AggiornaParametro("MiniatureAddOrario", RadioButton4.Checked);
_parametriSetup.AggiornaParametro("FotoAltezza", TextBox27.Text);
_parametriSetup.AggiornaParametro("FotoLarghezza", TextBox28.Text);
// SetupIni.AggiornaParametro("FotoCodice", TextBox13.Text)
// SetupIni.AggiornaParametro("FotoDimOriginali", CheckBox2.Checked)
_parametriSetup.AggiornaParametro("FontDimensione", TextBox11.Text);
_parametriSetup.AggiornaParametro("FontDimensioneMiniatura", TextBox25.Text);
_parametriSetup.AggiornaParametro("FontBold", CheckBox3.Checked);
_parametriSetup.AggiornaParametro("FontNome", ComboBox3.Text);
_parametriSetup.AggiornaParametro("TestoTesto", Model.HorizontalText);
_parametriSetup.AggiornaParametro("TestoTrasparente", TextBox9.Text);
_parametriSetup.AggiornaParametro("TestoMargine", TextBox12.Text);
_parametriSetup.AggiornaParametro("TestoPosizione", ComboBox1.Text);
_parametriSetup.AggiornaParametro("TestoAllineamento", ComboBox2.Text);
_parametriSetup.AggiornaParametro("MarchioFile", TextBox10.Text);
_parametriSetup.AggiornaParametro("MarchioAltezza", TextBox14.Text);
_parametriSetup.AggiornaParametro("MarchioLarghezza", TextBox15.Text);
_parametriSetup.AggiornaParametro("MarchioMargine", TextBox16.Text);
_parametriSetup.AggiornaParametro("MarchioAllOrizzontale", ComboBox4.Text);
_parametriSetup.AggiornaParametro("MarchioAllVerticale", ComboBox5.Text);
_parametriSetup.AggiornaParametro("MarchioTrasparenza", TextBox19.Text);
_parametriSetup.AggiornaParametro("MarchioAggiungi", CheckBox5.Checked);
_parametriSetup.AggiornaParametro("TempoGara", CheckBox7.Checked);
_parametriSetup.AggiornaParametro("Orario", CheckBox8.Checked);
_parametriSetup.AggiornaParametro("EtichettaOrario", TextBox18.Text);
_parametriSetup.AggiornaParametro("GeneraleForzaJpg", chkForzaJpg.Checked);
_parametriSetup.AggiornaParametro("GeneraleRotazioneAutomatica", chkRotazioneAutomatica.Checked);
_parametriSetup.AggiornaParametro("GrandezzaVerticale", TextBox30.Text);
_parametriSetup.AggiornaParametro("MargineVerticale", TextBox31.Text);
_parametriSetup.AggiornaParametro("DimensioniOriginali", CheckBox15.Checked);
_parametriSetup.AggiornaParametro("TestoVerticale", Model.VerticalText);
_parametriSetup.AggiornaParametro("NomeMiniatura", RadioButton6.Checked);
_parametriSetup.AggiornaParametro("DataFoto", CheckBox16.Checked);
_parametriSetup.AggiornaParametro("NumeroFoto", CheckBox17.Checked);
_parametriSetup.AggiornaParametro("ColoreTestoRGB", TextBox34.Text);
_parametriSetup.AggiornaParametro("TempoSmall", RadioButton5.Checked);
_parametriSetup.AggiornaParametro("NumTempoSmall", RadioButton7.Checked);
_parametriSetup.AggiornaParametro("CompressioneJpeg", TextBox32.Text);
_parametriSetup.AggiornaParametro("CompressioneJpegMiniatura", TextBox33.Text);
// 2021
_parametriSetup.AggiornaParametro("ChunkSize", TextBox8.Text);
_parametriSetup.AggiornaParametro("ThreadsCount", TextBox7.Text);
_parametriSetup.SalvaParametriSetup();
Text = "Image Catalog - " + LeggiSoloNomeFile(IlNome);
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Progressiva");
}
else
{
_parametriSetup.AggiornaParametro("DirDividiTipoNumerazione", "Files");
}
_parametriSetup.AggiornaParametro("MiniatureCrea", CheckBox1.Checked);
_parametriSetup.AggiornaParametro("MiniatureSuffisso", TextBox3.Text);
_parametriSetup.AggiornaParametro("MiniatureAltezza", TextBox5.Text);
_parametriSetup.AggiornaParametro("MiniatureLarghezza", TextBox6.Text);
_parametriSetup.AggiornaParametro("MiniatureAddScritta", RadioButton3.Checked);
_parametriSetup.AggiornaParametro("MiniatureAddOrario", RadioButton4.Checked);
_parametriSetup.AggiornaParametro("FotoAltezza", TextBox27.Text);
_parametriSetup.AggiornaParametro("FotoLarghezza", TextBox28.Text);
// SetupIni.AggiornaParametro("FotoCodice", TextBox13.Text)
// SetupIni.AggiornaParametro("FotoDimOriginali", CheckBox2.Checked)
_parametriSetup.AggiornaParametro("FontDimensione", TextBox11.Text);
_parametriSetup.AggiornaParametro("FontDimensioneMiniatura", TextBox25.Text);
_parametriSetup.AggiornaParametro("FontBold", CheckBox3.Checked);
_parametriSetup.AggiornaParametro("FontNome", ComboBox3.Text);
_parametriSetup.AggiornaParametro("TestoTesto", Model.HorizontalText);
_parametriSetup.AggiornaParametro("TestoTrasparente", TextBox9.Text);
_parametriSetup.AggiornaParametro("TestoMargine", TextBox12.Text);
_parametriSetup.AggiornaParametro("TestoPosizione", ComboBox1.Text);
_parametriSetup.AggiornaParametro("TestoAllineamento", ComboBox2.Text);
_parametriSetup.AggiornaParametro("MarchioFile", TextBox10.Text);
_parametriSetup.AggiornaParametro("MarchioAltezza", TextBox14.Text);
_parametriSetup.AggiornaParametro("MarchioLarghezza", TextBox15.Text);
_parametriSetup.AggiornaParametro("MarchioMargine", TextBox16.Text);
_parametriSetup.AggiornaParametro("MarchioAllOrizzontale", ComboBox4.Text);
_parametriSetup.AggiornaParametro("MarchioAllVerticale", ComboBox5.Text);
_parametriSetup.AggiornaParametro("MarchioTrasparenza", TextBox19.Text);
_parametriSetup.AggiornaParametro("MarchioAggiungi", CheckBox5.Checked);
_parametriSetup.AggiornaParametro("TempoGara", CheckBox7.Checked);
_parametriSetup.AggiornaParametro("Orario", CheckBox8.Checked);
_parametriSetup.AggiornaParametro("EtichettaOrario", TextBox18.Text);
_parametriSetup.AggiornaParametro("GeneraleForzaJpg", chkForzaJpg.Checked);
_parametriSetup.AggiornaParametro("GeneraleRotazioneAutomatica", chkRotazioneAutomatica.Checked);
_parametriSetup.AggiornaParametro("GrandezzaVerticale", TextBox30.Text);
_parametriSetup.AggiornaParametro("MargineVerticale", TextBox31.Text);
_parametriSetup.AggiornaParametro("DimensioniOriginali", CheckBox15.Checked);
_parametriSetup.AggiornaParametro("TestoVerticale", Model.VerticalText);
_parametriSetup.AggiornaParametro("NomeMiniatura", RadioButton6.Checked);
_parametriSetup.AggiornaParametro("DataFoto", CheckBox16.Checked);
_parametriSetup.AggiornaParametro("NumeroFoto", CheckBox17.Checked);
_parametriSetup.AggiornaParametro("ColoreTestoRGB", TextBox34.Text);
_parametriSetup.AggiornaParametro("TempoSmall", RadioButton5.Checked);
_parametriSetup.AggiornaParametro("NumTempoSmall", RadioButton7.Checked);
_parametriSetup.AggiornaParametro("CompressioneJpeg", TextBox32.Text);
_parametriSetup.AggiornaParametro("CompressioneJpegMiniatura", TextBox33.Text);
// 2021
_parametriSetup.AggiornaParametro("ChunkSize", TextBox8.Text);
_parametriSetup.AggiornaParametro("ThreadsCount", TextBox7.Text);
_parametriSetup.AggiornaParametro("OverwriteImages", Model.OverwriteImages);
_parametriSetup.SalvaParametriSetup();
Text = "Image Catalog - " + LeggiSoloNomeFile(ilNome);
}
private void Button6_Click(object sender, EventArgs e)
@ -471,6 +471,7 @@ public partial class MainForm
TextBox32.Text = _parametriSetup.LeggiParametroString("CompressioneJpeg");
TextBox33.Text = _parametriSetup.LeggiParametroString("CompressioneJpegMiniatura");
TextBox34.Text = _parametriSetup.LeggiParametroString("ColoreTestoRGB");
Model.OverwriteImages = _parametriSetup.LeggiParametroBoolean("OverwriteImages");
if (File.Exists(TextBox10.Text))
{
PictureBox1.Image = Image.FromFile(TextBox10.Text);
@ -572,6 +573,7 @@ public partial class MainForm
_picSettings.TestoMin = RadioButton6.Checked;
_picSettings.JpegQuality = int.Parse(TextBox32.Text);
_picSettings.JpegQualityMin = int.Parse(TextBox33.Text);
_picSettings.OverwriteFiles = Model.OverwriteImages;
}
private List<FileInfo> getFiles(DirectoryInfo sourceDir)

View file

@ -57,21 +57,21 @@ namespace ImageCatalog
return Risposta;
}
public bool LeggiParametroBoolean(string NomeParametro)
public bool LeggiParametroBoolean(string nomeParametro)
{
string Risposta = "";
var risposta = "";
try
{
var LElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + NomeParametro + "'");
foreach (var LaRiga in LElenco)
Risposta = LaRiga["Valore"].ToString();
var lElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + nomeParametro + "'");
foreach (var laRiga in lElenco)
risposta = laRiga["Valore"].ToString();
}
catch
{
Risposta = "";
risposta = "";
}
switch (Risposta.ToUpper() ?? "")
switch (risposta.ToUpper() ?? "")
{
case "TRUE":
case "OK":

View file

@ -4,97 +4,138 @@ using ImageCatalog_2.Services;
using MaddoShared;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Logging.Console;
using Microsoft.Extensions.Options;
namespace ImageCatalog_2
namespace ImageCatalog_2;
static class Program
{
static class Program
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);
private const int STD_OUTPUT_HANDLE = -11;
private const int STD_ERROR_HANDLE = -12;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetStdHandle(int nStdHandle, IntPtr handle);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetConsoleWindow();
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(
string lpFileName,
uint dwDesiredAccess,
uint dwShareMode,
IntPtr lpSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
IntPtr hTemplateFile);
private const uint GENERIC_WRITE = 0x40000000;
private const uint OPEN_EXISTING = 3;
private static void RedirectConsoleOutput()
{
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool AllocConsole();
var stdOutHandle = CreateFile("CONOUT$", GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
var safeFileHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(stdOutHandle, true);
var fileStream = new FileStream(safeFileHandle, FileAccess.Write);
var standardOutput = new StreamWriter(fileStream) { AutoFlush = true };
Console.SetOut(standardOutput);
Console.SetError(standardOutput);
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);
public static IServiceProvider ServiceProvider { get; private set; }
[STAThread]
static void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
private const int STD_OUTPUT_HANDLE = -11;
private const int STD_ERROR_HANDLE = -12;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetStdHandle(int nStdHandle, IntPtr handle);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetConsoleWindow();
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(
string lpFileName,
uint dwDesiredAccess,
uint dwShareMode,
IntPtr lpSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
IntPtr hTemplateFile);
private const uint GENERIC_WRITE = 0x40000000;
private const uint OPEN_EXISTING = 3;
private static void RedirectConsoleOutput()
{
var stdOutHandle = CreateFile("CONOUT$", GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
var safeFileHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(stdOutHandle, true);
var fileStream = new FileStream(safeFileHandle, FileAccess.Write);
var standardOutput = new StreamWriter(fileStream) { AutoFlush = true };
Console.SetOut(standardOutput);
Console.SetError(standardOutput);
}
public static IServiceProvider ServiceProvider { get; private set; }
[STAThread]
static void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
AllocConsole();
RedirectConsoleOutput();
AllocConsole();
RedirectConsoleOutput();
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
ServiceProvider = serviceCollection.BuildServiceProvider();
ServiceProvider = serviceCollection.BuildServiceProvider();
var mainForm = ServiceProvider.GetRequiredService<MainForm>();
//var mainViewModel = ServiceProvider.GetRequiredService<DataModel>();
var mainForm = ServiceProvider.GetRequiredService<MainForm>();
//var mainViewModel = ServiceProvider.GetRequiredService<DataModel>();
//mainForm.Model = mainViewModel;
//mainForm.Model = mainViewModel;
Application.Run(mainForm);
}
Application.Run(mainForm);
}
private static void ConfigureServices(ServiceCollection services)
{
// Register your services here
services.AddTransient<ITestService, TestService>();
private static void ConfigureServices(ServiceCollection services)
{
// Register your services here
services.AddTransient<ITestService, TestService>();
services.AddTransient<DataModel>();
services.AddTransient<DataModel>();
services.AddTransient<ImageCreationStuff>();
services.AddTransient<ImageCreatorSharp>();
services.AddTransient<ImageCreationStuff>();
services.AddTransient<ImageCreatorSharp>();
services.AddSingleton<ParametriSetup>();
services.AddSingleton<PicSettings>();
services.AddSingleton<ParametriSetup>();
services.AddSingleton<PicSettings>();
// Register your forms
services.AddTransient<MainForm>();
// Register your forms
services.AddTransient<MainForm>();
services.AddLogging(configure =>
{
configure.AddConsole();
configure.SetMinimumLevel(LogLevel.Debug);
});
}
services.AddLogging(configure =>
{
configure.AddCustomFormatter();
configure.AddConsole();
configure.SetMinimumLevel(LogLevel.Debug);
});
}
}
public static class ConsoleLoggerExtensions
{
public static ILoggingBuilder AddCustomFormatter(
this ILoggingBuilder builder) =>
builder.AddConsole(options => options.FormatterName = nameof(CustomLoggingFormatter))
.AddConsoleFormatter<CustomLoggingFormatter, ConsoleFormatterOptions>();
}
public sealed class CustomLoggingFormatter : ConsoleFormatter, IDisposable
{
private readonly IDisposable _optionsReloadToken;
private ConsoleFormatterOptions _formatterOptions;
public CustomLoggingFormatter(IOptionsMonitor<ConsoleFormatterOptions> options)
// Case insensitive
: base(nameof(CustomLoggingFormatter)) =>
(_optionsReloadToken, _formatterOptions) =
(options.OnChange(ReloadLoggerOptions), options.CurrentValue);
private void ReloadLoggerOptions(ConsoleFormatterOptions options) =>
_formatterOptions = options;
public override void Write<TState>(
in LogEntry<TState> logEntry,
IExternalScopeProvider scopeProvider,
TextWriter textWriter)
{
string? message =
logEntry.Formatter?.Invoke(
logEntry.State, logEntry.Exception);
if (message is null)
{
return;
}
textWriter.WriteLine($"{message}");
}
public void Dispose() => _optionsReloadToken?.Dispose();
}