Log aus Dll durchreichen (Action(of String))

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Log aus Dll durchreichen (Action(of String))

    Hallo Leute

    Ich stehe gerade voll am Schlauch weil ich sowas noch nie gemacht habe, aber auch (wirklich) gerade nicht weis wonach ich googeln soll.

    In einer DLL möchte ich einen Log nach außen reichen. Ich dachte daran an ein Action(Of String) wie es das Entity Framework 6 hat.
    Beim EF kann man nach dem Instanzieren der Contextklasse einfach mit z.b. context.Database.Log = Console.Write oder context.Database.Log = Function(s) logger.Log("EFApp", s) den Log aus der DB bekommen.

    Ich habe mir den Quellcode unter github.com/aspnet/EntityFramework6 angesehen, bin aber nicht ganz schlau daraus geworden.
    Habe schon vieles Probiert, aber ich muss ehrlich sagen (Asche auf mein Haupt) ich mache zum ersten mal was mit "Action(Of T)". *duck*

    Vielleicht kann mir ja jemand den Knoten im Hirn lösen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo @EaranMaleasi

    ​Danke für deine Antwort. Das war auch mein erster Gedanke da ich recht gerne mit Interfaces Arbeite.
    Ich habe mich dann nur an das EF erinnert, das war sooo schön einfach für den jenigen der die dll verwendet.

    ​Mal abgesehen von dem Projekt wo ich das gerade einbauen will, interessiert es mich ja auch. Ich würde gerne wissen wie sowas funzt, ich mags nicht wenn ich weis da gibt es was und ich weis nicht wie ich es Anwenden kann. ;)

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo @Gonger96

    Danke, soweit war ich ja. Habe das Property Public Property Log() As Action(Of String)
    Wenn ich jetzt mit theClass.Log = Function(l) Debug.WriteLine(l) oder prov.Log = Debug.WriteLine() arbeiten will funktioniert das nicht.

    Bei theClass.Log = Function(l) Debug.WriteLine(l) bekomme ich den Fehler: er Ausdruck ergibt keinen Wert
    Bei theClass.Log = Debug.WriteLine() bekomme ich den Fehler: Fehler bei der Überladungsauflösung, da keine zugreifbare "WriteLine" diese Anzahl von Argumenten akzeptiert

    ​Wo hab ich den Knoten im Hirn? Das ist wieder sowas was sicher simpel ist und ich komm nicht drauf. Könnt mir grade die Haare ausreißen.
    Vielleicht weist du ja weiter.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Also, was ich jetzt herausgefunden habe ist, das VB.NET anders als C# anscheinend einen Rückgabewet für Lambda Expressions benötigt.
    ​Jetzt mal Probiert und das hier funzt:

    VB.NET-Quellcode

    1. ​Dim prov As New DwaNetWrapper.Sync.Provider.XmlSyncProvider
    2. prov.Log = Function(s) ConsoleWriteLine(s)
    3. prov.ImageFolderName = "Neu"
    4. Console.Read()

    ​und hier die Function:

    VB.NET-Quellcode

    1. ​Public Function ConsoleWriteLine(text As String) As String
    2. Debug.WriteLine(text)
    3. Return text
    4. End Function


    ​Trotzdem merkwürdig das ich unter VB.NET sehr wohl das ganze ohne Methode machen kann wenn die "Action" in einer C# Klasse ist. Darf doch keinen Unterschied machen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich wird kein Freund mehr von VB 8o
    ​Also eine Action<> gibt keinen Wert zurück, deswegen macht ein Lamda das einen wert zurückgibt wenig Sinn.

    VB.NET-Quellcode

    1. ​Class Test
    2. Public Property Log() As Action(Of String)
    3. Public Sub Boo()
    4. Log?.Invoke("Buh!")
    5. End Sub
    6. End Class
    7. Module Module1
    8. Public Sub Main(args As String())
    9. Dim t As New Test()
    10. t.Boo()
    11. t.Log = AddressOf Console.WriteLine
    12. t.Boo()
    13. t.Log = Sub(s)
    14. Console.WriteLine(s + " Lamda")
    15. End Sub
    16. t.Boo()
    17. Console.ReadKey()
    18. End Sub
    19. End Module
    @Gonger96 das wars!! Warum bin ich nicht selbst darauf gekommen? Es liegt so nahe.
    ​So blöd es klangt, ich hatte noch nie in meinem eigenen Code mit Action zu tun.

    ​Aber ich werd mir das alles gleich mal ganz genau durchlesen.
    Vielen Dank an dich.

    War jetzt zwar etwas peinlich, ist mir aber egal. So lernt man eben.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##