begin process at 2012 02 11 13:17:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Autre

 > 

Interface générique et héritage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Interface générique et héritage

mardi 15 janvier 2008 à 17:50:06 | Interface générique et héritage

thiosyiasar

Boujour,
 

J'ai un fournisseur de service d'accès aux données.

Je lui passe un type d'entité et lui me retourne le service correspondant.

Chaque service implémente une interface générique en définissant le type d'entité géré

 

Le code fournit compile mais il ' y un pb de cast à l'exécution, ce qui m'étonne à moitié.

 

Avez-vous des solutions ?

Sachant que les services doivent restés typés pour le type d'entité.

Et que j'ai besoin d'un méthode qui me fournit le service a partir d'un type d'entité

//// CODE A EXECUTER 

    //// CODE A EXECUTER //////////////////////////////
    static class Program
    {
        [STAThread]
        static void Main()
        {
            // Création de l'entité
            User oUser = new User();

            // Sélection du service d'accès aux données
            IEntityService<Entity> oService = ServiceProvider.GetService(oUser.GetType());

            // Utiliastion du service pour enregistrer
            oService.Save(User);
        }

    }

    //// DEFINITION DES ENTITES ///
    public abstract class Entity
    {
        public long Id = 0;
    }

    public class Content : Entity { }

    public class User : Entity { }

    //// DEFINITION DES SERVICES ///
    public interface IEntityService<TEntity> where TEntity : Entity
    {
        void Save(TEntity entity);
    }

    public class ContentService : IEntityService<Content>
    {
        public void Save(Content entity) { }
    }

    public class UserService : IEntityService<User>
    {
        public void Save(User entity) { }
    }

    //// DEFINITION DU FOURNISSEUR DE SERVICE ///
    public static class ServiceProvider
    {
        public static IEntityService<Entity> GetService(Type type)
        {
            if (type.Equals(typeof(Content)))
                return (IEntityService<Entity>)new ContentService();
            else if (type.Equals(typeof(User)))
                return (IEntityService<Entity>)new UserService();
            else
                return null;
        }
    }


Merci,

Nico

jeudi 17 janvier 2008 à 15:34:36 | Re : Interface générique et héritage
jeudi 17 janvier 2008 à 15:35:14 | Re : Interface générique et héritage

thiosyiasar

Réponse acceptée !
Bon ca n'a pas l'air d'emballer grand monde mon histoire.... :( J'ai trouvé une solution alternative, le but est d'attaquer le service correspondant sans connaitre le type d'entité. J'ai supprimé la méthode public GetService, et mon provider reprend tout les méthode des services (ici pour l'exemple, la méthode Save(Entity entity), dans le cas d'une méthode sans paramètre, (par ex GetNew()), on lui passe le type en paramètre (Entity GetNew(Type entityType)) Le fournisseur de service a donc cette tete maintenant et ca marche, en utilisant la rélfexion. Si vous avez une solutions plus propres... je suis preneur static class Program { [STAThread] static void Main() { // Création de l'entité User oUser = new User(); // Sélection du service d'accès aux données ServiceProvider.Save(oUser); } } public static class ServiceProvider { public static void Save(Entity entity) { if (entity == null) throw new ArgumentException("L'entité ne peut être nulle"); ExecuteService(entity.GetType(), "Save", new object[] { entity }); } private static object ExecuteService(Type entityType, string methodName, object[] parameters) { // Sélection du service object oService = GetService(entityType); // Sélection de la méthode Type oServiceType = oService.GetType(); MethodInfo oMethod = oServiceType.GetMethod(methodName); // Execution et retour de la valeur object oValue = oMethod.Invoke(oService, parameters); return oValue; } /// /// Retourne le service en fonction du type d'entité donné /// /// IEntityService private static object GetService(Type entityType) { if (entityType == null) throw new ArgumentException("Le type ne peut pas etre null"); else if (!entityType.IsSubclassOf(typeof(Entity))) throw new ArgumentException("Le type doit etre un entité"); else if (entityType.Equals(typeof(Content))) return new ContentService(); else if (entityType.Equals(typeof(User))) return new UserService(); else throw new ArgumentException("Ce type d'entité n'a pas de service attribué"); } } Nico


Cette discussion est classée dans : public, type, class, service, ientityservice


Répondre à ce message

Sujets en rapport avec ce message

Pb Web Service type de donné... [ par DJCODEKILLER ] Bonjour à tousJe suis en train de développer un service web sous Visual Studio en C#.J'utilise le protocole HTTP GETla methode de mon web service me Constructeur "intelligent" [ par revlis ] BonjourJ'ai des class hérité de userControl et je voudrait passer les composant a une class qui les initilise et construit si besoinpour cela j'ai fai retourner une structure [ par bip98 ] J'ai trouve un lien qui en parle... mais il me semble pas très juste:http://www.csharpfr.com/forum.v2.aspx?ID=189261Voilà mon cas: public struct struc Web Service et problème de type [ par nicoloyo ] Bonjour, J'ai créé un web service "MonWebService" et une méthode "System.IO.Stream GetMonStream()" Dans le client j'y accède de cette façon: localh Problèmes de création d'un service Windows [ par nyoto ] Bonjour à tous,Ne développant pas depuis très longtemps en .Net je galère grave pour créer un service windows récupérant automatiquement à intervalles [.NET2] acceder a une fonction de Form1 dans une autre classe [ par ChamY ] Bonjour,J'ai une question toute bete je pense, mais qui me pose un ptit probleme.Je dispose d'une forme avec ca class (class form1), j ai egalement un Je trouve tjs pas de solution pour mon blem "A l'aide" [ par hred1 ] Bon j'explique tout:J'ai le même namespace par toutje suis dans la class 1 (class fraim ok)et je cherche à appler  methode() qui de trouve dans class Dérivation de classe abstraite [ par yoh_777 ] Je voudrais simplement dériver une classe abstraite ayant un constructeur comportant un paramètre.  Voici mon programme  <div style="border: 1pt d class [ par 24 ans ] salut tout le monde j'utilise VS 2005j' ai ajouter un projet de type class librairie à ma solution pour définir une DLL .qui contient une class "IMPRE Problème POO et héritage [ par fregolo52 ] bonjour,Le novice en POOa besoin d'aide voici mon code :public class Device{  public void Update();}public class Camera : Device{   public voi


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,396 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales