Laden...

Unity und mehrere Assemblies

Erstellt von Coffeebean vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.114 Views
Coffeebean Themenstarter:in
2.207 Beiträge seit 2011
vor 11 Jahren
Unity und mehrere Assemblies

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

T
50 Beiträge seit 2010
vor 11 Jahren

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

F
10.010 Beiträge seit 2004
vor 11 Jahren

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.

Coffeebean Themenstarter:in
2.207 Beiträge seit 2011
vor 11 Jahren

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

F
10.010 Beiträge seit 2004
vor 11 Jahren

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.