2016-04-25 15 views
3

Im mit Dienstschicht lattern verwenden, und meine Lösung enthält drei Projekte:Wie Modelltypen zwischen Projekten

Kern Dienst UI

In meinem Controller Im UI-Projekt, das ich den folgenden Code haben:

public ActionResult AddSpotifyAlbums(List<SpotifyAlbums> albums) 
     { 
      _profileService.AddSpotifyAlbums(albums); 
      return Json(new { data = albums }); 
     } 

SpotifyAlbums in List<SpotifyAlbums> ist ein Modell in meinem UI-Projekt. Es sieht wie folgt aus:

public class SpotifyAlbums 
    { 
     public string URI { get; set; } 
     public int profileId { get; set; } 
    } 

Wie Sie sehen können, Im einen Dienst hier verwendet wird, _profileService, eine Methode aufzurufen, die die Speicherung der Alben behandelt. Die Art der Alben lautet SpotifyAlbums. Wie soll ich in meinem Service arbeiten, wenn der Modelltyp der Alben SpotifyAlbums ist?

Ich habe versucht, ein identisches Modell in meinem Service-Projekt zu erstellen, aber es funktioniert nicht. Ich bekomme folgende Fehlermeldung:

Severity Code Description Project File Line Suppression State Error CS1503 Argument 1: cannot convert from 'System.Collections.Generic.List' to 'soundyladder.Service.Models.SpotifyAlbums'

Anyone, wer kann mir hier helfen, das zu lösen?

+2

Setzen Sie die Modelldefinitionen in ein Klassenbibliotheksprojekt, auf das von Ihren anderen Projekten verwiesen wird. – David

Antwort

1

Sie können Objekte unterschiedlicher Typen nicht willkürlich zuweisen. Obwohl Sie ihnen den gleichen Namen geben, sind sie unabhängige Entitäten.

Unter der Annahme, dass die Service- und UI-Projekte auf Ihr Core-Projekt verweisen, können Sie in Ihrem Core-Projekt die Klasse SpotifyAlbums definieren und diese Klasse auf Ihre anderen Layer verweisen.

0

Bryan, Sie müssen entscheiden, welches Modul "besitzt" SpotifyAlbum. Die Entscheidung muss Datenkapselungs-, Datenzugriffs- und Datenmanipulationsaspekte berücksichtigen. Es ist wichtig, die richtigen Service-Referenzen zu erstellen und alle Module, die SpotifyAlbum Instanzen verwenden, von dem Modul zu "besetzen", das die SpotifyAlbum besitzt. Dann würden alle anderen Module Proxy-Klassen aufweisen, die aus den Verweisen auf das Modul "Owning" erstellt wurden.

0

Ich benutze das gleiche Design-Muster (Ressourcen-basierte vertrauenswürdige Subsystem). Ich verwende gerne eine DLL, die gemeinsamen Code und gemeinsame Modelle enthält. Dann verweisen alle Projekte auf diese DLL für die Modelldefinitionen.