"Dynamisches" Zusammenführen von Libraries

  • C#

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    "Dynamisches" Zusammenführen von Libraries

    Servus,

    ich hab hier drei Libraries A, B und C, die zwar recht klein sind, doch von Grund auf verschiedene Funktionalitäten haben. Nun war es so, dass C Referenzen auf A und B hatte, und so eine Klasse bereitgestellt hat, die die Funktionalitäten aller dreien gebündelt hat. Nun jedoch brauche ich bei einem neuen Projekt die Funktionalität aus B und C, jedoch nicht aus A, und ich möchte nur ungern eine "tote" DLL in meinem Projekt mitschleifen.

    Konkret sind das nun eine Library für ORM-Style Datenzugriff (A), eine Library mit einem "trockenem" Session Management(B), und eine Library die als Host für WCF-Dienste fungiert, und via MEF diese Dienste lädt(C).
    C Hat nun eine Klasse GlobalProperties, die den WCF Diensten übergeben wird als Interface IGlobalProperties, in der sich Funktionen zur erzeugung von DB-Zugriffen, zum Verwalten aller "Sessions" des Hosts befinden, als auch eben "globale Properties".

    Darüber hinaus gibt es zu jeder Library noch einer Interface-Library, sodass die via MEF geladenen Dienste nur die Interfaces einbinden müssen, um geladen zu werden und auf alles Zugriff zu haben.

    Nun brauche ich nicht A, jedoch die anderen beiden, weiß jedoch nicht wie ich das genau anstellen soll. Ich dachte zunächst an eine GlobalProperties bzw. IGlobalProperties die mit partial gekennzeichnet ist und in allen Libraries vorkommt, das schlug jedoch direkt fehl. Als nächstes dachte ich mir, dass ich die beiden anderen Libraries via MEF einbinden könnte, doch dazu müssten entweder die Libraries A und B Verweise auf C haben, was auch nicht gerade optimal ist, oder aber ich muss so gut wie alle Interfaces in C deklarieren, was komplett am Sinn der einzelnen Interface-Libraries vorbei geht. Sonst hätte ich direkt eine einzige Library geschriben.

    Habt ihr noch eine andere Lösung? Oder sollte ich am besten die 6 Projekte einfach in 2 zusammenpacken? Wäre jedoch nur die Lösung die ich ganz zuletzt nehmen würde, da ich die Libraries doch gerne getrennt halten würde.
    Hallo

    Mir würde auf die schnelle einfallen das du C Nochmal "aufteilst". Wobei der eine Teil von C keine Referenz auf A braucht.

    Mich erinnert das ein bischen An EntityFramework wenn man ein Repository Pattern implementieren will und sohin im UnitOfWork Stil arbeiten will.
    Da muss man das Model natürlich auch komplett von Context trennen und ein Generisches Repository nochmals extra aufteilen.

    Oder bring ich jetzt A,B,C,A,C,B :/ durcheinander?

    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. ##

    @Nofear23m Also habe ich dann C1 mit Verweis auf A und C2 ohne diesen Verweis? Ich dupliziere also Quasi C und nehme aus C2 die Funktionalität von A heraus? Nicht gerade praktisch. Ich bin kein Fan von Redundanz.

    @RushDen
    Was dazu führt, dass ich letztenendes 4 Bibliotheken zusätzlich hab, für jede Mögliche kombination aus Funktionalitäten AB, AC,BC und ABC.

    Ich muss dazu sagen, ich hab mich nun dazu entschieden die drei Bibliotheken zusammenzufassen.
    Dennoch wäre ich durchaus daran interessiert zu wissen, ob mein Problem ohne Zusätzliche Bibliothek lösbar wäre.
    Hallo

    ​Nicht gerade praktisch. Ich bin kein Fan von Redundanz

    Praktisch, wo siehst du hier die Redundanz? Und... du duplizierst nicht, du machst zwei Verschiedene, wenn jetzt C Code enthält welcher dann auch in die D (die neue welche aus der Teilung resultiert) muss weil dort benötigt müsste dies WIEDER in eine Eigene.

    ​Tja, oder... Die machst die Prozeduren einfach Friend und machst die Assembly von wo aus du zugreifen willst einfach zur FriendAssembly.
    ​Je nachdem ob du unter .Net oder .Net Standard bzw. .Net Core arbeitest gibt es hier verschiedene Herangehensweisen.


    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. ##

    EaranMaleasi schrieb:

    Da es Libraries sind, sind, mit wenigen Außnahmen, alle Member Public. Daran sollte es nicht scheitern.


    ​Ja, wenn du in einem Projekt die Methoden aus B und C brauchst aber nicht aus A dann mach die Methoden Friend statt Public So sieht dein Projekt die Methoden nicht mehr und du benötigst keinen Verweis auf A. Für andere Projekte wo du die Methoden aus A brauchst, musst du in A sagen das dieses Projekt ein "Friendly" Projekt ist damit dieses darauf zugreifen kann obwohl die Methoden Friend sind.

    ​So ginge es. Ist üblich in größeren Projekten um z.b. gewisse UnitTests überhaupt machen zu können.

    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. ##