2016-11-24 5 views
2

ich ein C# web api Projekt, deren Architektur haben wird in dem folgende Diagramm (ProjectA) gezeigt enter image description hereRundreferenzfragen in C# WebAPI Projekten

In dem obigen Diagramm-Controller im Projekt A die Dienste von Project A um Um den eigentlichen Job auszuführen, verwenden die Services das Repository, um auf der Datenbank zu lesen und zu schreiben. Alle von ihnen verwenden Autofac Dependency Injection. Beispiele: Constructor von Controller, die verschiedenen Dienste

public DKMenuController(ITokenService tokenService, IUserService userservice, IDKMenuService dkMenuService) 
    { 
     _tokenService = tokenService; 
     _dkMenuService = dkMenuService; 
     _userservice = userservice; 
    } 

Constructor eines Service verwendet, die für die Kommunikation mit dem DB

public DKMenuService(IRepository repository) 
    { 
     this._repository = repository; 
    } 

Die verschiedenen Dienste, die zugrunde liegenden Repository verwendet werden registriert, wenn die Anwendung gestartet werden wie folgt

Jetzt möchte ich ein anderes Projekt hinzufügen (benannt in der EXA mple ProjectB), das einfach eine Klassenbibliothek ist und von einem ProjectA-Service aufgerufen wird, wird etwas tun und dann das Repository-Muster von ProjectA verwenden und Daten in der DB speichern. Das Problem ist, dass dieses Design zu zirkulären Referenzen führt und die 2 Projekte nicht kompiliert werden. Es gibt eine ähnliche Frage hier How to solve circular reference? aber die Antwort ist nicht so klar, ob es korrekt ist. Irgendwelche Ideen?

+0

Es gibt keine zirkuläre Abhängigkeit in Ihrem Diagramm. Können Sie bitte klären, wo die zirkuläre Abhängigkeit liegt? – Enigmativity

+0

@ Enigmativität - schauen Sie sich die Header, die 2 _projects_ (Spalten) haben einen Kreis. –

+0

@HenkHolterman - Welche Header? Es gibt keinen Kreis im Diagramm. Es ist ein gerichteter azyklischer Graph. – Enigmativity

Antwort

0

Soweit ich weiß, was Sie hier zeigen, ist kein Zirkelbezug. Sie können keinen Kreis nach den Pfeilen im Diagramm zeichnen.

Wenn die Repository-Klassen auf Project A Services sind, dann haben Sie einen Zirkelverweis, aber das ist nicht auf die Frage gezeichnet. Mit diesem Hintergrund, wenn das der Fall ist, das Repository außerhalb Projekt A. bewegen

+1

Auf Klassenebene ist nichts zirkulär, aber auf Projekt/Assembly Ebene wäre es? –

+0

Ich stimme Peter B. zu. Im Projekt/Assemly Level gibt es einen Zirkelbezug. Nehmen wir an, dass es in Projekt A einen ServiceA gibt. Dieser Service A initiiert ein neues Objekt von Service B. ServiceB führt einige Dinge aus und ruft dann das Projekt A-Repository auf, um in DB zu speichern. Wenn Sie versuchen, Projekt B zu erstellen, wird es fehlschlagen, da es die Binärdateien von Projekt A für die Repository-Klasse benötigt. Wenn Sie versuchen, zuerst Projekt A zu erstellen, wird es fehlschlagen, da es die B-ServiceB-Klasse 0 des Projekts benötigt –

+0

@ChristophAdamakis - Projekt A hat kein Repository. Ich sehe keinen Zyklus. – Enigmativity

2

Es einige Arbeit sein kann, aber ein Update wäre, um die Repository in eine neue ProjectRepo zu bewegen.

haben dann ProjectA und ProjectB beide Referenz ProjectRepo, und dann können ProjectA auch ProjectB ohne B Referenz A. benötigen

+0

Es hört sich gut an, aber ich muss alles neu gestalten :( –

+0

Das sollte kein "Redesign" erfordern. Nur ein wenig Feinschliff und Refactoring in der Implementierung (en). –

Verwandte Themen