2010-08-15 15 views
0

J'ai une solution que j'ai conçue avec 5 couches.Passage des DTO d'un projet séparé à la couche UI Services WCF RIA

Ils sont:

  • UI/couche de présentation
  • service couche
  • Business Logic couche
  • d'accès aux données couche
  • DTO/couche commune (IQUTECHDTO)

Je veux passer le DTO à l'interface utilisateur. Ci-dessous se trouve la couche de service qui expose une méthode GetVendors que je veux retourner à VendorDTO. Cet objet va remplir une liste déroulante.

Sur le dossier de l'interface utilisateur
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.ServiceModel.DomainServices.Hosting; 
using System.ServiceModel.DomainServices.Server; 
using IQUTechDTO; 
using IQUTECHDAL; 

namespace BusinessApplication6.Web.Services 
{ 

    public class Foos 
    { 

     [Key] 

     public int FooId { get; set; } 

     public string Name { get; set; } 

    } 

    // TODO: Create methods containing your application logic. 
    [EnableClientAccess()] 
    public class BillService : DomainService 
    { 

     public IEnumerable<Foos> GetFoos() 
     { 
      return new List<Foos> { new Foos { FooId = 42, Name = "Fred" } }; 
     } 

     [Query] 
     public IEnumerable<VendorDTO> GetVendors() 
     { 
      return new List<VendorDTO> { new VendorDTO { VendorID = 42 } }; 
     } 

    } 
} 

quand je tente de créer un objet de type VendorDTO je ne peux pas. J'ai cependant pu accéder à l'objet Foo à partir du calque de l'interface utilisateur.

Le VendorDTO a été marqué comme serialazble mais il ne réside cependant dans un séparé projet (IQUTECHDTO)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel; 
using System.ServiceModel.DomainServices; 
using System.ServiceModel.Web; 


namespace IQUTechDTO 
{ 
    public enum LoadStatus 
    { 
    Initialized = 0, 
    Ghost = 1, 
    Loaded = 2 
    } 

    [Serializable] 
    public class VendorDTO 
    { 
     /// <summary> 
     ///DTO for the 'Vendor' object. 
     /// </summary> 

     public VendorDTO() 
     { 
      this.loadStatus = LoadStatus.Initialized; 
     } 

     ///<summary> 
     /// Copy constructor 
     ///</summary> 
     public VendorDTO(VendorDTO sourceDTO) 
     { 
      loadStatus = sourceDTO.loadStatus; 
      VendorID = sourceDTO.VendorID; 
      VendorName = sourceDTO.VendorName; 
      VendorAddress1 = sourceDTO.VendorAddress1; 
      VendorAddress2 = sourceDTO.VendorAddress2; 
      VendorCity = sourceDTO.VendorCity; 
      VendorState = sourceDTO.VendorState; 
      VendorEmail = sourceDTO.VendorEmail; 
      VendorPhone = sourceDTO.VendorPhone; 
      VendorPOC = sourceDTO.VendorPOC; 
      VendorRegion = sourceDTO.VendorRegion; 
     } 

     public LoadStatus loadStatus; 

     [Key] 
     public int VendorID { get; set; } 
     public string VendorName; 
     private string VendorAddress1; 
     private string VendorAddress2; 
     private string VendorEmail; 
     private string VendorPhone; 
     private string VendorCity; 
     private string VendorState; 
     private string VendorPOC; 
     private string VendorRegion; 

    } 
} 

Voici la classe UI

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Windows.Navigation; 
using BusinessApplication6.Web.Services; 
using System.ServiceModel.DomainServices.Client; 
using BusinessApplication6.Web; 


namespace BusinessApplication6.Views.BOM 
{ 
    public partial class BOMCRUD : Page 
    { 
     public BOMCRUD() 
     { 
      InitializeComponent(); 
      LoadTree(); 


     } 

     public void LoadTree() 
     { 
      BillContext newCon = new BillContext(); 


      //This works 
      Foos fooobj = new Foos(); 

      //This doesnt work 
      VendorDTO vendorobj = new VendorDTO(); 

     } 



     // Executes when the user navigates to this page. 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
     } 



    } 
} 

Pourquoi il me laisse pas accéder à cet objet .

Votre aide serait grandement appréciée.

Cordialement, Tom

Répondre

0

La classe de l'interface utilisateur a ne dispose pas d'une référence à IQUTECHDTO comme la classe Foos fait (en BusinessApplication6.Web).

+0

Lorsque j'essaie d'ajouter une référence de projet à IQUTECHDTO, il est indiqué que vous ne pouvez ajouter que des références de projet à d'autres projets Silverlight dans cette solution. Cela se produit lorsque j'essaie d'ajouter la référence sur le calque de l'interface utilisateur à la bibliothèque DTO. – TommyK

+0

@TommyK - Puisque vous utilisez Silverlight, votre DTO doit être une bibliothèque de classes Silverlight. Vous pouvez ensuite LINK à un fichier .cs à partir du serveur et le côté client tant que vous n'avez aucun code qui n'est pas pris en charge par Silverlight. Jetez un oeil à http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight pour quelques idées. – DaveB