Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Libérez le génie ChatGPT pour C# !

Après vous avoir offert un avant-goût du potentiel de ChatGPT et C# il y a quelques semaines, plongeons ensemble dans les profondeurs de ce que ces deux forces combinées peuvent accomplir !

ChatGPT ?

Vous savez déjà un peu de ce que c'est, c'est une IA et tout le monde en parle. Mais ce qui m'intéresse c'est comment en tirer profit en tant que développeur C#. Comme tout cela est nouveau et que tout ce qu'on entend n'est pas forcément juste, posons juste les bases de ce qu'est ChatGPT.

ChatGPT est un modèle de langage naturel basé sur l'intelligence artificielle entraîné par OpenAI. En tant que développeur DotNet, vous pouvez intégrer ChatGPT à vos projets en utilisant l'API RESTful disponible pour interagir avec le modèle. Dans l'article précédent présentant les grandes lignes je vous avais déjà montré un code qui permet de "discuter" avec l'API ChatGPT.

ChatGPT peut être utilisé pour diverses tâches de traitement du langage naturel telles que la génération de texte, la compréhension de texte, la traduction de langue, etc. En utilisant des techniques d'apprentissage en profondeur, ChatGPT est capable de générer des réponses cohérentes et pertinentes à partir de données d'entrée. Son champ d'application est en réalité sans limite et peut se glisser dans n'importe quelle tâche, qu'elle implique directement du conversationnel ou que l'IA soit utilisée de façon astucieuse pour améliorer une App.

L'API RESTful de ChatGPT vous permet d'intégrer facilement le modèle à vos projets DotNet. En utilisant une simple requête HTTP, vous pouvez envoyer une demande à ChatGPT pour générer du texte ou effectuer d'autres tâches de traitement du langage naturel. Les réponses de ChatGPT peuvent être facilement intégrées dans vos applications DotNet pour fournir une expérience utilisateur plus riche et plus interactive.

En résumé, ChatGPT est un modèle de langage naturel basé sur l'IA qui peut être facilement intégré dans vos projets DotNet en utilisant l'API RESTful. Avec ses capacités avancées de traitement du langage naturel, ChatGPT peut améliorer considérablement l'expérience utilisateur de vos applications.

Je crois que je ne reviendrai plus ces aspects vraiment basiques mais il fallait le faire pour s'assurer de votre compréhension de ce nouvel outil qui est là pour durer sous la forme de ChatGPT ou d'autres IA dans le futur.

Exemple d'interaction entre une App C# et ChatGPT

Tout d'abord, vous devez créer une requête HTTP pour envoyer une demande à l'API RESTful de ChatGPT. La demande doit inclure le texte d'entrée et l'identifiant du modèle ChatGPT à utiliser :

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class ChatGPTExample
{
    static async Task Main()
    {
        string inputText = "Bonjour, comment vas-tu ?";
        string modelId = "chatgpt-medium"; // L'ID du modèle ChatGPT à utiliser
        string response = await GetChatGPTResponse(inputText, modelId);
        Console.WriteLine(response);
    }
    static async Task<string> GetChatGPTResponse(string inputText, string modelId)
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "<YOUR_API_KEY>");
        var requestBody = new { prompt = inputText };
        var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
        var response = await client.PostAsync($"https://api.openai.com/v1/models/{modelId}/completions", content);
        var responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }
}

Dans cet exemple, vous pouvez remplacer <YOUR_API_KEY> par votre clé API OpenAI pour utiliser ChatGPT. Vous pouvez obtenir une clé API en créant un compte OpenAI et en générant une clé dans le portail de développeur OpenAI. Ce qui est payant comme l'accès à ChatGPT conversationnel, et l'abonnement à l'un n'est pas lié à celui de l'autre.

Une fois que vous avez exécuté ce code, ChatGPT renverra une réponse qui peut être utilisée dans votre application DotNet. Vous pouvez ensuite traiter la réponse selon les besoins de votre application.

Quels sont les différentes API ChatGPT accessible en C# ?


OpenAI propose plusieurs modèles de ChatGPT qui peuvent être utilisés via l'API RESTful en C#. Les développeurs C# peuvent choisir le modèle qui convient le mieux à leur projet en fonction des besoins de leur application. Voici quelques-uns des modèles de ChatGPT disponibles :

  • ChatGPT-4 : Le modèle le plus avancé, plus puissant, gérant des contextes plus grands. Mais sa puissance n'est pas toujours indispensable selon la tâche à accomplir. C'est pour le moment le modèle le plus couteux (les API sont facturés en "token" envoyés et reçus).
  • ChatGPT-3 : C'est le modèle précédent de ChatGPT, capable de générer du texte de haute qualité et de répondre à des questions complexes. Cependant, l'utilisation de ce modèle est plus coûteuse en termes de ressources et de coût que les précédents mais restent une version plus économique que la version 4.
  • ChatGPT-2 : Ce modèle est similaire à ChatGPT-3 mais moins avancé en termes de capacités de traitement du langage naturel. C'est un choix plus économique pour les développeurs C# qui ont besoin d'un modèle de ChatGPT de haute qualité.
  • ChatGPT-Neo : Il s'agit d'un modèle de ChatGPT open source qui peut être utilisé gratuitement par les développeurs C#. Ce modèle a été développé par EleutherAI et est disponible en plusieurs tailles.
  • ChatGPT-Small : C'est un modèle plus petit de ChatGPT qui peut être utilisé pour les projets C# qui nécessitent moins de puissance de traitement. Ce modèle est plus rapide et moins coûteux que les modèles plus grands de ChatGPT.

Il convient de noter que chaque modèle de ChatGPT a ses propres limites en termes de longueur de réponse, de temps de réponse et de qualité de réponse. Les développeurs C# doivent donc choisir le modèle qui convient le mieux à leur projet en fonction de ces facteurs.

Quels sont les scénarios où ChatGPT peut améliorer une App C# ?

Sans être exhaustive la liste suivante vous donnera quelques idées :

  • Chatbots : ChatGPT peut être utilisé pour alimenter des chatbots en langage naturel, permettant aux utilisateurs d'interagir avec des systèmes automatisés de manière plus fluide et intuitive.
  • Réponses automatisées aux clients : Les applications C# qui gèrent de grandes quantités d'interactions client peuvent utiliser ChatGPT pour fournir des réponses automatisées de haute qualité, améliorant ainsi l'expérience client et réduisant les coûts d'assistance.
  • Génération de contenu : ChatGPT peut être utilisé pour générer automatiquement du contenu pour les applications C#, telles que des descriptions de produits, des résumés d'articles et des réponses aux questions fréquemment posées.
  • Correction de texte : Les applications C# peuvent utiliser ChatGPT pour corriger automatiquement le texte des utilisateurs en temps réel, offrant ainsi une expérience utilisateur plus conviviale.
  • Traduction de langues : ChatGPT peut être utilisé pour traduire automatiquement le texte d'une langue à une autre, offrant une expérience utilisateur multilingue.
  • Autres scénarios : ChatGPT peut également être utilisé dans de nombreux autres scénarios d'application C#, tels que l'analyse de sentiments, la reconnaissance d'entités nommées, la classification de texte et la génération de résumés.

Dans l'ensemble, ChatGPT offre aux développeurs C# la possibilité d'intégrer des capacités de traitement du langage naturel à leurs applications, ce qui peut améliorer l'expérience utilisateur et automatiser de nombreuses tâches de traitement du langage naturel.
Rappel : Il s'agit bien ici de se faire une idée de la façon d'utiliser l'API ChatGPT dans une App C# (MAUI, WPF, WinUI...) ce qui n'est qu'un sous-ensemble de tout ce que ChatGPT peut apporter à un développeur. Le mode conversationnel peut aider à document du code, écrire des rapports de test, Githup Copilot peut aider à écrire du code à votre place dans Visual Studio ou VS Code, Copilot dans la suite Office 365 peut vous aider à créer des résumés ou des livres, à les mettre en page, à en tirer des slide-shows... Bref L'IA ne se limite pas d'une part à ChatGPT (les Cognitives Services Microsoft sont toujours là pour des tâches spécifiques) et encore moins à l'appel de ses API... Ayez conscience que pour l'instant j'essaye de débrouiller par petits bouts une énorme friche qu'il faudra traiter en plusieurs passes et en repassant parfois aux mêmes endroits !

Comment relier un contexte applicatif aux réponses de ChatGPT pour qu'elles soient pertinentes ?

Le contexte est l'une des choses les plus importantes avec ChatGPT. C'est la continuité de ce contexte qui rend la "conversation" possible car comme un humain l'IA se rappelle de ce qui a été dit dans l'échange. Hors mode conversationnel simple, c'est à dire quand utilise les API au sein de son App, le contexte est tout aussi essentiel. Il faut donner à ChatGPT les informations qui lui permettront de formuler des réponses pertinentes.

Pour relier un contexte applicatif aux réponses de ChatGPT et assurer cette pertinence, il est important de fournir à ChatGPT des informations contextuelles suffisantes sur le sujet de la conversation. Voici quelques stratégies que les développeurs C# peuvent utiliser pour ce faire :

  • Collecte de données : Les développeurs C# peuvent collecter des données contextuelles à partir de sources telles que des bases de données, des API et des entrées utilisateur pour fournir à ChatGPT un contexte riche et pertinent.
  • Analyse de sentiment : Les développeurs C# peuvent utiliser des outils d'analyse de sentiment pour évaluer l'humeur et le ton des entrées utilisateur, ce qui peut aider à contextualiser les réponses de ChatGPT.
  • Utilisation de mots-clés : Les développeurs C# peuvent inclure des mots-clés ou des tags pertinents pour le contexte applicatif dans les entrées utilisateur, ce qui peut aider ChatGPT à comprendre le sujet de la conversation.
  • Envoi de contexte préalable : Les développeurs C# peuvent inclure des informations contextuelles préalables dans la conversation, telles que la date, l'heure ou le lieu, pour aider ChatGPT à comprendre le contexte de la conversation.
  • Utilisation de la mémoire de travail : Les développeurs C# peuvent utiliser la mémoire de travail de ChatGPT pour stocker des informations sur les conversations précédentes et les entrées utilisateur, ce qui peut aider ChatGPT à se souvenir des sujets et des thèmes antérieurs.

En général, plus les développeurs C# fournissent d'informations contextuelles à ChatGPT, plus les réponses de ChatGPT seront pertinentes et utiles.

Transmettre un contexte à ChatGPT

Avant de poser une question à ChatGPT il faut ainsi lui indiquer le fameux contexte, le tout se plaçant dans la même requête. Voici un exemple C# :

using OpenAI;
// Créez une instance de l'API OpenAI
var openAI = new OpenAI(apiKey: "VOTRE_CLE_API");
// Créez une requête pour ChatGPT avec un contexte
var prompt = "Je voudrais commander une pizza pour le dîner.";
var context = "Je suis allergique aux noix.";
var request = new CompletionRequest
{
    Prompt = $"{prompt} {OpenAIHelper.ContextSeparator} {context}",
    MaxTokens = 50,
    Temperature = 0.7f,
    Model = "text-davinci-002"
};
// Envoyez la requête à ChatGPT
var response = await openAI.Completions.CreateCompletionAsync(request);
// Affichez la réponse de ChatGPT
Console.WriteLine(response.Choices[0].Text);

Dans cet exemple, nous créons une requête pour ChatGPT en incluant un contexte pertinent pour la conversation. Nous envoyons ensuite la requête à ChatGPT et affichons la réponse. Le résultat sera une réponse de ChatGPT qui tient compte du contexte fourni. Notez que la constante OpenAIHelper.ContextSeparator est utilisée pour séparer le prompt et le contexte.

Il est important de noter que ce n'est qu'un exemple et que les développeurs C# devront adapter le code en fonction de leurs besoins spécifiques et de l'API OpenAI qu'ils utilisent. L'API est en évolution et cet exemple n'a pas valeur de documentation, lorsque vous posséderez votre clé d'API référez-vous à la documentation d'OpenAI avant de vous lancer !

Comment sont transmises à ChatGPT les données sur les produits dans l'exemple c-dessus ?

Comme tout exemple de code, c'est un peu réducteur, tout le monde peut le comprendre. Mais il ne faut pas que raccourci rime avec magie ! En effet, dans l'exemple ci-dessus de quelle façon les données concernant les produits que l'utilisateur peut commander sont transmises à ChatGPT pour qu'il en tienne compte dans sa réponse (la composition de chaque Pizza de la carte par exemple) ?

Dans l'exemple que j'ai donné précédemment, les données sur les produits peuvent être transmises à ChatGPT de plusieurs façons, selon la façon dont l'application est conçue. Voici quelques stratégies que les développeurs C# pourraient utiliser pour transmettre ces données à ChatGPT :

  • Récupération de données à partir d'une base de données : Les développeurs C# peuvent stocker les informations sur les produits dans une base de données, puis interroger cette base de données en fonction des demandes de l'utilisateur. Ils pourraient ensuite inclure les informations sur les produits pertinentes dans les entrées utilisateur qui sont envoyées à ChatGPT.

  • Utilisation d'une API : Les développeurs C# peuvent utiliser une API pour récupérer les informations sur les produits auprès d'une source externe, comme un fournisseur de données tiers. Ils pourraient ensuite inclure ces informations dans les entrées utilisateur envoyées à ChatGPT.

  • Stockage des informations dans une structure de données : Les développeurs C# peuvent stocker les informations sur les produits dans une structure de données en mémoire, tels qu'un tableau ou une liste. Ils pourraient ensuite interroger cette structure de données en fonction des demandes de l'utilisateur et inclure les informations sur les produits pertinentes dans les entrées utilisateur envoyées à ChatGPT.

Quelle que soit la stratégie choisie, il est important de s'assurer que les informations sur les produits sont clairement étiquetées et facilement accessibles pour l'application. Les développeurs peuvent également utiliser des techniques telles que l'analyse de texte et l'extraction d'informations pour extraire automatiquement les informations pertinentes à partir de données brutes telles que des descriptions de produits.

Analyser des sentiments

J'ai abordé le sujet de façon rapide dans une liste un peu plus haut dans cet article : l'analyse des sentiments. Qu'est-ce donc ? Il s'agit ici de déterminer dans quelle disposition psychologique se trouve l'utilisateur en analysant les réponses qu'il fournit à l'application. Est-il en colère ? Satisfait ? Rien de tout ça ? Les réponses de l'App devront s'adapter à tous ces cas (et bien d'autres selon le contexte).

voici un exemple simple d'analyse des sentiments en C# utilisant la bibliothèque de traitement du langage naturel de Microsoft (Microsoft Natural Language Processing - NLP) :

using Microsoft.Azure.CognitiveServices.Language.TextAnalytics;
using Microsoft.Azure.CognitiveServices.Language.TextAnalytics.Models;
using System;
using System.Collections.Generic;
// Définissez vos variables d'environnement pour accéder aux clés et à l'URL de l'API Text Analytics
string endpoint = "https://VOTRE-URL-TEXT-ANALYTICS.cognitiveservices.azure.com/";
string key = "VOTRE-CLE-API-TEXT-ANALYTICS";
// Créez un client pour l'API Text Analytics
var client = new TextAnalyticsClient(new ApiKeyServiceClientCredentials(key))
{
    Endpoint = endpoint
};
// Définissez un exemple de texte à analyser pour l'analyse des sentiments
var input = new MultiLanguageBatchInput(new List<MultiLanguageInput>()
{
    new MultiLanguageInput("en", "0", "Je suis vraiment content de ce produit. Il est excellent!")
});
// Envoyez le texte à l'API Text Analytics pour l'analyse des sentiments
var result = client.SentimentAsync(false, input).Result;
// Affichez le score de sentiment pour chaque document analysé
foreach (var document in result.Documents)
{
    Console.WriteLine($"Score de sentiment pour le document {document.Id}: {document.Score}");
}

Dans cet exemple, nous utilisons la bibliothèque NLP de Microsoft pour analyser le sentiment d'un exemple de texte. Nous créons un client pour l'API Text Analytics en utilisant notre clé d'API et l'URL de l'API, puis nous envoyons un texte à analyser à l'API en utilisant la méthode SentimentAsync. L'API retourne un score de sentiment pour chaque document analysé, que nous affichons dans la console.

Il est important de noter que ce n'est qu'un exemple et que les développeurs C# devront adapter le code en fonction de leurs besoins spécifiques et de l'API qu'ils utilisent. 
Ici comme on le voit, ce n'est plus ChatGPT qui est utilisé mais les Cognitives Services de Microsoft ! Il est important de comprendre que toutes ces IA sont complémentaires et que seule leur synergie permet d'obtenir des résultats vraiment bluffant (ce qui est toujours bon convaincre de futurs utilisateurs) et vraiment pertinents (ce qui est toujours bon pour garder un client !).
ChatGPT peut-il écrire l'UI pour vous ?
S'assoir devant son PC et donner le cahier des charges à ChatGPT, aller à la machine à café et taper la causette quelques minutes avec ses collègues et venir se remettre à son bureau pour découvrir l'App entièrement écrite du code C# jusqu'à l'UI en XAML ! C'est un rêve ou un cauchemar, selon son niveau d'expérience. Pour le développeur Senior qui n'aura qu'à relire tout ça pour le contrôler et le peaufiner c'est un rêve et une productivité multipliée par mille. Pour le développeur débutant c'est un cauchemar car un senior pourra à lui tout seul faire le boulot de 5 ingénieurs débutant, tout en ayant le temps de discuter à la machine à café. L'avenir risque d'être chaud pour ceux qui débutent et qui sont utilisés comme des "petites mains", c'est clair.
Mais pour l'instant, car ce n'est certainement pas une situation qui est faite pour durer, ChatGPT ne sait pas écrire des UI XAML ! Mais lui ou d'autres IA le feront prochainement c'est certain.

ChatGPT est capable de générer du code C# en fonction des instructions et des exemples fournis, mais il n'est pas conçu pour écrire une application complète avec son interface utilisateur, que ce soit en WPF ou en Xamarin.Forms.

En effet, ChatGPT est un outil basé sur le traitement du langage naturel et l'IA, il est donc plus adapté pour la création de chatbots ou d'assistants virtuels qui peuvent interagir avec les utilisateurs à travers des conversations textuelles. Bien qu'il puisse fournir des suggestions de code et des réponses à des questions techniques, il ne peut pas remplacer la conception et la mise en œuvre d'une interface utilisateur, qui nécessitent des compétences spécifiques en développement d'applications.

Cependant, ChatGPT peut être utilisé pour compléter le travail des développeurs C# en fournissant des suggestions et des réponses en langage naturel pour des questions techniques spécifiques, ce qui peut aider à accélérer le processus de développement et améliorer l'expérience utilisateur. On peut soit l'interroger en mode conversationnel (l'abonnement ChatGPT 4 coûte $20/mois sous forme d'abonnement), soit utiliser les services intégrés dans Visual Studio ou VS Code avec GitHub Copilot (qui lui aussi fonctionne par abonnement).

Si on force ChatGPT à produire une UI, par exemple quelque chose simple comme une fenêtre d'information d'un produit (désignation, code, prix, quantité en stock...), il s'ait répondre malgré tout... Certes ce n'est pas une UI d'artiste, mais elle fonctionne et peut s'avérer être un début de mise en place avant de l'améliorer.

Voici un exemple de code XAML pour une fenêtre MAUI affichant les informations d'un produit :

<ContentPage>
    <StackLayout>
        <Label Text="Désignation" />
        <Label Text="{Binding Designation}" />
        <Label Text="Code" />
        <Label Text="{Binding Code}" />
        <Label Text="Prix" />
        <Label Text="{Binding Prix}" />
        <Label Text="Quantité en stock" />
        <Label Text="{Binding QuantiteStock}" />
    </StackLayout>
</ContentPage>

Dans cet exemple qui n'est début, l'IA a utilisé un ContentPage contenant un StackLayout pour organiser les différents éléments de l'interface utilisateur. Les Label permettent d'afficher les différentes informations du produit, qui sont liées à des propriétés d'un objet en utilisant la syntaxe de liaison de données {Binding}.
Ce qui est le plus remarquable c'est que ChatGPT va aller plus loin dans la logique de l'App et va nous indiquer qu'il faut une classe Produit pour faire fonctionner ce code XAML !

voici la suite de sa réponse :

"Pour afficher les informations d'un produit spécifique dans cette fenêtre, il faudrait créer un objet Produit et lier les propriétés à l'interface utilisateur, comme dans cet exemple :

public class Produit
{
    public string Designation { get; set; }
    public string Code { get; set; }
    public decimal Prix { get; set; }
    public int QuantiteStock { get; set; }
}
public class ProduitPage : ContentPage
{
    public ProduitPage(Produit produit)
    {
        BindingContext = produit;
        // ... Ajout du contenu de la page ...
    }
}

Dans cette classe ProduitPage, nous avons lié le contexte de liaison de données à un objet Produit spécifique, qui sera utilisé pour remplir les propriétés des Label. La fenêtre affichera alors les informations du produit donné en utilisant le modèle XAML que nous avons créé précédemment."

C'est bluffant malgré tout !
Alors je suis allé un cran plus loin en lui demandant s'il pouvait ajouter le support MVVM à cet exemple.
Et voici sa réponse (sans modification de ma part, même les explications) :

Voici un exemple de ViewModel utilisant le pattern MVVM pour gérer les données d'un produit et les afficher dans une fenêtre MAUI :

public class ProduitViewModel : INotifyPropertyChanged
{
    private Produit _produit;
    public string Designation
    {
        get { return _produit.Designation; }
        set { _produit.Designation = value; OnPropertyChanged(); }
    }
    public string Code
    {
        get { return _produit.Code; }
        set { _produit.Code = value; OnPropertyChanged(); }
    }
    public decimal Prix
    {
        get { return _produit.Prix; }
        set { _produit.Prix = value; OnPropertyChanged(); }
    }
    public int QuantiteStock
    {
        get { return _produit.QuantiteStock; }
        set { _produit.QuantiteStock = value; OnPropertyChanged(); }
    }
    public ProduitViewModel(Produit produit)
    {
        _produit = produit;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Dans cette classe ProduitViewModel, nous avons encapsulé un objet Produit et exposé ses propriétés à l'aide de propriétés de lecture et d'écriture. Les propriétés de liaison de données seront liées à ces propriétés du ViewModel plutôt qu'aux propriétés de l'objet Produit directement. Nous avons également implémenté l'interface INotifyPropertyChanged pour signaler les changements de propriété aux contrôles d'interface utilisateur.

Pour utiliser ce ViewModel dans notre fenêtre ProduitPage, nous pouvons le lier à un objet Produit spécifique en utilisant le code suivant :

public class ProduitPage : ContentPage
{
    public ProduitPage(Produit produit)
    {
        var viewModel = new ProduitViewModel(produit);
        BindingContext = viewModel;
        // ... Ajout du contenu de la page ...
    }
}

Dans ce code, nous créons un nouvel objet ProduitViewModel à partir de l'objet Produit donné et le lions au contexte de liaison de données de la fenêtre. Les propriétés de l'interface utilisateur sont alors automatiquement mises à jour chaque fois que les propriétés du ViewModel sont modifiées.

Je reprends la main... C'est vraiment incroyable non ? On peut partir de quelque chose de simple et lui demander des améliorations qu'il est même capable de justifier ! Avec GitHub Copilot on peut obtenir aussi des réponses multiples parmi lesquelles on peut choisir. L'avenir du développeur vient de changer et c'est irréversible. C'est pour cela que je vous en parle et que je vous en reparlerai encore n'ayez crainte !

Vicieusement je me suis demandé si on pouvait le pousser un peu plus loin dans ce jeu d'amélioration. Et je lui ai demandé s'il pouvait ajouter l'Injection de Dépendances au code exemple (déjà modifié pour y supporter MVVM). Sa réponse fut la suivante :

"Dans la classe App, nous allons enregistrer le ViewModel et la dépendance du service dans le conteneur de l'injection de dépendances IServiceCollection fourni par le framework. Nous allons également enregistrer notre page ProductPage pour que le framework sache comment l'instancier.

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
        var services = new ServiceCollection();
        services.AddSingleton<IProductService, ProductService>();
        services.AddTransient<ProductViewModel>();
        services.AddTransient<ProductPage>();
        ServiceProvider = services.BuildServiceProvider();
    }
    public static IServiceProvider ServiceProvider { get; private set; }
    protected override void OnStart()
    {
        // Handle when your app starts
    }
    protected override void OnSleep()
    {
        // Handle when your app sleeps
    }
    protected override void OnResume()
    {
        // Handle when your app resumes
    }
}

Maintenant, nous pouvons récupérer le ViewModel à partir du conteneur et l'injecter dans notre page ProductPage.

public partial class ProductPage : ContentPage
{
    private ProductViewModel _viewModel;
    public ProductPage(ProductViewModel viewModel)
    {
        InitializeComponent();
        _viewModel = viewModel;
        BindingContext = _viewModel;
    }
}

Et dans la méthode OnAppearing de la page, nous pouvons récupérer l'instance de IProductService à partir du conteneur et l'utiliser pour initialiser le ViewModel.

protected override void OnAppearing()
{
    base.OnAppearing();
    var productService = App.ServiceProvider.GetService<IProductService>();
    _viewModel.Initialize(productService, 1); // Récupère le produit avec l'id 1
}

De cette manière, nous avons utilisé l'injection de dépendances pour fournir la dépendance de notre ViewModel et de notre service. Cela permet une meilleure séparation des préoccupations et facilite les tests unitaires."

Je reprends la main ici... ChatGPT 4 a été "formé" sur des données qui vont jusqu'à 2021, il connait MAUI mais donne souvent des exemples Xamarin.Forms, ce qui n'est pas gênant (en dehors éventuellement des nouveautés ou des espaces de noms). Bien entendu lorsque ChatGPT est intégré à Visual Studio avec GitHub Copilot ce problème ne se pose pas. Je n'ai utilisé ici que le mode conversationnel payant de ChatGPT 4 qui n'est pas dédié à l'écriture de code up-to-date comme peut l'être GitHub Copilot. C'est la même IA mais entraînée avec des données plus pointues sur le développement (et plus à jour).

Conclusion

Comme je le disais l'utilisation des IA en développement c'est un sacré gros morceau. Cela concerne autant l'écriture de code que l'aide à écrire ce code, sa documentation, sa présentation, etc. Il existe deux modes principaux, le conversationnel et les API. ChatGPT offre les deux, les Cognitives Services que les API.
Bien utilisées tout au long du développement les IA vont désormais bouleverser la donne dans notre métier. C'est indéniable et irréversible car c'est devenu une réalité. On est loin des débats oiseaux il y a encore quelques années losque les IA n'était qu'une promesse... Elles sont là, je les ai vu et maintenant je dois convaincre un monde incrédule qu'il est temps de s'y mettre !
D'ailleurs je vous rappelle qu'il y a bientôt 6 ans, à l'occasion de la création du Microsoft User Group de Nantes en février 2017. Elle est illustrée avec les Xamarin.Forms et directement utilisable ou presque en MAUI. Il sera difficile de m'accuser d'opportunisme lorsque je parle de ChatGPT aujourd'hui, cette conférence a bien 6 ans et peut être vue ici https://youtu.be/OlUTxc9k1DE 

Stay Tuned ! (il y aura tant à dire sur ce sujet et d'autres...)
blog comments powered by Disqus