using Microsoft.Extensions.DependencyInjection; using Toolkit.Foundation; namespace Wallet; public class ItemCreatedHandler(IServiceProvider serviceProvider, ICache> cache, IPublisher publisher) : INotificationHandler>> { public Task Handle(CreatedEventArgs> args) { if (args.Sender is Item<(Guid, string, string)> item) { (Guid id, string name, string category) = item.Value; IServiceScope serviceScope = serviceProvider.CreateScope(); IServiceFactory serviceFactory = serviceScope.ServiceProvider.GetRequiredService(); IDecoratorService> decoratorService = serviceScope.ServiceProvider.GetRequiredService>>(); if (serviceFactory.Create(args => args.Initialize(), "All", id, name, "Description", category, true) is ItemNavigationViewModel viewModel) { Item<(Guid, string)> cachedItem = new((id, name)); cache.Add(cachedItem); int index = cache.IndexOf(cachedItem); decoratorService.Set(cachedItem); publisher.Publish(Insert.As(index, viewModel), "All"); } } return Task.CompletedTask; } }