Laden...

NET Core 3.1 Web API: Service mit async Methode aufrufen (Dateiinhalt als List<string> als Quelle)

Erstellt von muenzgeld vor 3 Jahren Letzter Beitrag vor 3 Jahren 692 Views
M
muenzgeld Themenstarter:in
1 Beiträge seit 2020
vor 3 Jahren
NET Core 3.1 Web API: Service mit async Methode aufrufen (Dateiinhalt als List<string> als Quelle)

Hallo zusammen,

ich möchte mir eine API bauen, die den Dateiinhalt als List<string> bereitstellt. Die API soll dann Anfragen bearbeiten und schauen welche strings schon in der List<string> enthalten sind. Die übereinstimmenden Strings sollen dann als Antwort auch wieder zurückgeschickt werden.

Ich habe das Gerüst an sich fertig, jedoch hänge ich gerade an einer Stelle. Ich habe zwei Services. Einmal den EfuExtractorService und den EfuIteamSearchService. Beide werden als Singleton im ServiceContainer registriert. EfuExtractorService stellt die Methode "Task<List<string>> ExtractFileNamesAsync" bereit. Mit dieser Methode kriege ich den Inhalt der Datei. Dieser Service wird nur innerhalb des EfuItemSearchService benötigt, damit ich das Property "EfuEntries" von EfuItemSearchService auf den aktuellen Inhalt setzen kann. Auf diesem Property werden dann auch die Suchaktionen durchgeführt.

Das Setzen der "EfuEntries" habe ich innerhalb einer Methode gekapselt: Diese heißt "ParseListAsync". Diese Methode ruft dann EfuExtractorService.ExtractFileNamesAsync innerhalb des EfuItemSearchService auf. Im Grunde muss ich jetzt nur noch diese Methode (EfuItemSearchService.ParseListAsync) aufrufen, damit mein Gedankenkonstrukt funktioniert. Allerdings weiß ich nicht, wo und wie ich auf die konkrete Instanz des Services zugreifen kann, damit ich diese Methode aufrufen kann. Im aktuellen Zustand ist "EfuEntries" immer null, da die Liste logischerweise nirgends initialisiert wird.

Insbesondere da diese Methoden asynchron ablaufen sollen. Die Datei hat gerne mal 90k Einträge und ich denke, dass die Verarbeitung auch gerne mal ein paar Sekunden dauern kann. Ich habe den Code in einem Github Repo, falls ich das ganze hier zu ungenau beschrieben habe.

Danke schonmal und Gruß.

16.825 Beiträge seit 2008
vor 3 Jahren

Ein Warmup eines Singletons (zB einen Init) macht man im App Bereich


public void Configure(IApplicationBuilder app) 
{
    app.ApplicationServices.GetService<IMyService>();
}

Da Du ein Singleton hast ist jeder Zugriff auf die Instanz die selbe.

Ich hab den Code mal grob überflogen; wenn Du noch nen bisschen das Basic Tutorial zu ASP.NET in den Microsoft Docs durchmachst, dann sieht das soweit okay aus.

Für meinen Blog verwende ich auch einen Singleton um die Markdown Files im Index zu halten.
Der Index ist quasi dabei meine InMemory Datenbank.

Alle anderen Dinge sind so umgesetzt, wie man es bei einer normalen Datenbank auch macht.
Das würde ich Dir an der Stelle auch empfehlen. Dann kannst Dich quasi an der Best Practise dazu orientieren.