developpement:dotnet:msioc
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
developpement:dotnet:msioc [2023/05/11 20:00] – sgariepy | developpement:dotnet:msioc [2023/06/19 18:43] (Version actuelle) – [Exemple] sgariepy | ||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
Documenté dans le contexte de .NET Core 7. | Documenté dans le contexte de .NET Core 7. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
Lifetimes | Lifetimes | ||
Ligne 56: | Ligne 51: | ||
.AddInfrastructure(); | .AddInfrastructure(); | ||
</ | </ | ||
+ | |||
+ | ====== Hosted Service ====== | ||
+ | |||
+ | |||
+ | * Permet d' | ||
+ | * Configuré dans ASP.NET Core ou via un modèle Worker Service | ||
+ | * Worker Service sont faits pour des tâches en arrière-plan | ||
+ | * Utiliser ASP.NET Core pour ajouter un service //hosted// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <code csharp> | ||
+ | using Microsoft.Extensions.Hosting; | ||
+ | |||
+ | public class CustomHostedService: | ||
+ | { | ||
+ | public CustomHostedService() | ||
+ | { | ||
+ | Console.WriteLine(" | ||
+ | } | ||
+ | | ||
+ | public async Task StartAsync(CancellationToken cancellationToken) | ||
+ | { | ||
+ | Console.WriteLine(" | ||
+ | |||
+ | await Task.Delay(1000, | ||
+ | } | ||
+ | | ||
+ | public Task StopAsync(CancellationToken cancellationToken) | ||
+ | { | ||
+ | return Task.CompletedTask; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Dans la configuration du _container_: | ||
+ | |||
+ | <code csharp> | ||
+ | services | ||
+ | .AddTransient< | ||
+ | </ | ||
+ | |||
+ | _Injecter_ le service manuellement: | ||
+ | |||
+ | <code csharp> | ||
+ | app.Services.GetService(typeof(CustomHostedService)); | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Background Service ===== | ||
+ | |||
+ | |||
+ | <code csharp> | ||
+ | using Microsoft.Extensions.Hosting; | ||
+ | |||
+ | public class CustomBackgroundService: | ||
+ | { | ||
+ | public CustomBackgroundService() | ||
+ | { | ||
+ | Console.WriteLine(" | ||
+ | } | ||
+ | | ||
+ | protected override async Task ExecuteAsync(CancellationToken stoppingToken) | ||
+ | { | ||
+ | await Task.Delay(1000, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Dans la configuration du _container_: | ||
+ | |||
+ | <code csharp> | ||
+ | services | ||
+ | .AddHostedService< | ||
+ | </ | ||
+ | |||
+ | _Injecter_ le service manuellement: | ||
+ | |||
+ | <code csharp> | ||
+ | app.Services.GetService(typeof(CustomBackgroundService)); | ||
+ | </ | ||
+ | |||
+ | ==== Exemple ==== | ||
+ | |||
+ | |||
+ | <code csharp> | ||
+ | protected override async Task ExecuteTask(CancellationToken cancellationToken) | ||
+ | { | ||
+ | |||
+ | while (!cancellationToken.IsCancellationRequested) | ||
+ | { | ||
+ | using (var scope = _serviceProvider.CreateScope()) | ||
+ | { | ||
+ | var productService = scope.ServiceProvider.GetService< | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====== Exemple exécutable dans LinqPad 7 ====== | ||
+ | |||
+ | Language: C# Program, .NET 7.0 | ||
+ | |||
+ | <code csharp> | ||
+ | void Main() | ||
+ | { | ||
+ | string[] args = new string[0]; | ||
+ | |||
+ | using IHost host = Host.CreateDefaultBuilder(args) | ||
+ | .ConfigureServices((_, | ||
+ | services | ||
+ | .AddSingleton< | ||
+ | .AddSingleton< | ||
+ | ) | ||
+ | .Build(); | ||
+ | |||
+ | using IServiceScope serviceScope = host.Services.CreateScope(); | ||
+ | IServiceProvider provider = serviceScope.ServiceProvider; | ||
+ | |||
+ | BasicService basicService = provider.GetService< | ||
+ | |||
+ | // host.Run(); | ||
+ | |||
+ | Console.WriteLine(" | ||
+ | } | ||
+ | |||
+ | #region Services | ||
+ | |||
+ | public class BasicService | ||
+ | { | ||
+ | private readonly ISimpleService _simpleService; | ||
+ | |||
+ | public BasicService( | ||
+ | ISimpleService simpleService) | ||
+ | { | ||
+ | _simpleService = simpleService; | ||
+ | |||
+ | SetupService(); | ||
+ | } | ||
+ | |||
+ | |||
+ | private void SetupService() | ||
+ | { | ||
+ | _simpleService.SayHello(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public interface ISimpleService { | ||
+ | public void SayHello(); | ||
+ | } | ||
+ | |||
+ | public class SimpleService: | ||
+ | { | ||
+ | private readonly ISimpleService _simpleService; | ||
+ | |||
+ | public SimpleService() {} | ||
+ | |||
+ | public void SayHello() | ||
+ | { | ||
+ | Console.WriteLine(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | #endregion | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
developpement/dotnet/msioc.1683828010.txt.gz · Dernière modification : 2023/05/11 20:00 de sgariepy