Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Unity und mehrere Assemblies
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2.207
Herkunft: Deutschland/Schweiz

Themenstarter:

Unity und mehrere Assemblies

beantworten | zitieren | melden

Hallo zusammen,

ich habe eine Architekturfrage, bei der ich Hilfe bräuchte.

Ich habe ein MVC4-Projekt und benutze IoC mit Unity. Das funktioniert soweit wunderbar.

Das problem mal ganz simpel runtergebrochen:

Angenommen ich habe mehrer Schichten, nehmen wir mal 3:

UI
===
BusinessLogic
===
DataBaseAccess

Wenn ich über NuGet Unity einfüge wird mir im UI-Projekt ein "Bootstrapper" angelegt. Diesen rufe ich dann in der Global.asax auf, damit sich anfang alle Klassen mit ihren Interfaces im Container registrieren.

Wenn jedoch das UI-Projekt im Bootstrapper auch Interfaces/Klassen vom DataBaseAccess registrieren muss, bekomme ich schon wieder eine Abhängigkeit von UI auf DataBaseAccess. Das möchte ich ja gerade vermeiden. Ich benutze diese Abhängigkeit im Moment nur dort (um Diksussionen vorzubeugen). Aber ich möchte in meinem UI nicht den DataBaseAccess als Abhängigkeit haben.

Wie kann ich dieses Problem lösen? Nachher sollen natürlich BusinessLogic-Klassen die DataBaseAccess-Klassen kennen (und nutzen) etc.

Ich hoffe mein Problem wird klar.

Liebe Grüsse

Coffeebean
private Nachricht | Beiträge des Benutzers
teebeast
myCSharp.de - Member



Dabei seit:
Beiträge: 42
Herkunft: Bayern

beantworten | zitieren | melden

Hi,

das Problem habe ich auch, sehe es persönlich aber nicht so als allzu kritisch, da es mir persönlich wichtiger ist, dass die Abhängigkeiten zwischen den Klassen nicht existieren. Abhängigkeiten zu Assemblies sind relativ leicht angepasst.

Meines Wissens könnte man die abhängigen Assemblies nur dadurch auflösen, in dem diese dynamisch registriert werden und die Konfigurationsklassen für Unity ermittelt und aufruft. MEF bietet hier einen möglichen Ansatz.

Ich fand den Aufwand bisher immer etwas übertrieben, vor allem da ich mit der Technik bisher relativ kleine Projekte umgesetzt habe. Trotzdem bin ich sehr auf Lösungsansätze gespannt. Vielleicht setzte ich dann sowas mal um, der Übung halber.

Grüße,
teebeast
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

Zitat
Wenn ich über NuGet Unity einfüge wird mir im UI-Projekt ein "Bootstrapper" angelegt.
Du kannst bei Nuget natürlich auswählen in welche Assembly du etwas installierst.
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2.207
Herkunft: Deutschland/Schweiz

Themenstarter:

beantworten | zitieren | melden

Zitat von FZelle
Du kannst bei Nuget natürlich auswählen in welche Assembly du etwas installierst.

Das stimmt. Aber selbst wenn alle meine Projekte einen Bootstrapper bekommen, muss ich sie immernoch über die global.asax.cs initialisieren. Somit hab ich das Problem mit dem Verweis nicht gelöst. Oder irre ich mich da?

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

Was hat jetzt das eine mit dem anderen zu tun?

Du sollst nicht überall einen Bootstrapper installieren oder sogar Unity, du sollst es an einer Zentralen stelle machen und den DI/IOC per Interface verteilen.

I.A. hat man eine grundsätzliche Bibliothek ( z.b. Infrastructure.Interface.dll ) wo alle überall benötigten Interface drin stecken.
Die kann jeder benutzen ohne einen Verweis auf die echte Implementierung zu haben.

Hier kannst Du dann auch z.b. CommonServiceLocator unterbringen.
Und damit lässt sich einfach sehr einfach eine kopplungsfreie Implementation erreichen.
private Nachricht | Beiträge des Benutzers