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 utilisateurusing 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
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
@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