IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

[POO] Classe inconnu dans dll


Sujet :

Dotnet

  1. #1
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut [POO] Classe inconnu dans dll


    Actuellement j'utilises dans un de mes projet un classe qui envoie des mails.

    Le principe est simple, la classe est dérivée de System.Web.Mail.MailMessage et contient des fonctions qui chacune formatte un mail, l'envoie et retourne si l'envoi c'est bien effectué.

    Cette classe doit etre migré dans un composant qui sera compilé sous forme de dll et intégré aux projets.

    Le problème se pose sur la signature de mes méthodes qui contienne pour certaines des objets propres au projet, donc erreur normale si j'essaye de compiler.

    Comment résoudre cela le plus proprement possible, sachant que j'aimerais autant que possible éviter une signature du type maFonction (object monObject1,object monObject2 ...) ?

    EDIT : Surtout que je récupères des attributs de mes classes donc le cast de l objet est impossible :p

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    ça dépend....il y a plusieurs solutions mais ça dépend de la façon dont tu compte utiliser cette dll.

    Tu veux faire une dll pour pouvoir l'utiliser sur d'autres projets (qui ont ou n'ont aucun rapport avec celui sur lequel tu es) ?

    Si oui, les objets propres à ton projet et que tu passes à cette classe seront-t-ils aussi utilisés par les autres projets (genre des objets métiers utilisés partout) ?

    Quels traitements effectue cette classe (email) sur les objets (ceux qui posent problemes) que tu lui passes ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    ça dépend....il y a plusieurs solutions mais ça dépend de la façon dont tu compte utiliser cette dll.

    Tu veux faire une dll pour pouvoir l'utiliser sur d'autres projets (qui ont ou n'ont aucun rapport avec celui sur lequel tu es) ?

    Si oui, les objets propres à ton projet et que tu passes à cette classe seront-t-ils aussi utilisés par les autres projets (genre des objets métiers utilisés partout) ?

    Quels traitements effectue cette classe (email) sur les objets (ceux qui posent problemes) que tu lui passes ?
    La dll sera commune a tous les projets n'ayant aucun rapport entre eux.

    Les objets sont unique pour chaque projet.
    C'est sois des convoyeurs (classe qui contient 1 ligne d'une table de données), dans ce cas je souhaite récuperer les attributs.
    sois des services, dans ce cas je récupères des méthodes.
    Les convoyeurs et services sont liés aux projets.

    Pour l exemple, j ai une fonction qui mail sur manque de pieces (exemple le plus simple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public bool MailReliquat(Convoyeur cvr,Service srv)
    {
    To = cvr.sName;
    Body = "il manques " + srv.GetReliquat(cvr.Id) + " pièces";
     
    return this.Send();
    }

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Une petite question bete, mais pourquoi ne pas faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public bool SendMail(string to,string body)
    {
    To = to;
    Body = body;
     
    return this.Send();
    }
    et, dans ta classe Convoyeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    public bool SendReliquat (Service srv){
     
    string body = "il manques " + srv.GetReliquat(this.Id) + " pièces";
     
    return classMail.Send(cvr.sName, body);
    }

    ?

    Si ta classe de mail contient une fonction par type d'envoi de mail, tu lui impose une dependance forte a tout le reste de ton framework...

    Sinon, tu peux envisager une approche comme ca, basee sur des interfaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public bool SendFormattedMail(IBLLObject monObjet,IBLLFormatter monFormatter, IServiceProvider monService)
    {
    To = monObjet.GetRecipient();
    Body = monFormatter.GetBody(monObjet,monService);
     
    return this.Send();
    }
    et tu modifies tes classes pour qu'elles heritent des interfaces adequates

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    Une petite question bete, mais pourquoi ne pas faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public bool SendMail(string to,string body)
    {
    To = to;
    Body = body;
     
    return this.Send();
    }
    et, dans ta classe Convoyeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    public bool SendReliquat (Service srv){
     
    string body = "il manques " + srv.GetReliquat(this.Id) + " pièces";
     
    return classMail.Send(cvr.sName, body);
    }
    Si je le fais autant que j'instancie aussi un MailMessage dans le convoyeur et ma classe Mail ne sert plus a rien ?

    Si ta classe de mail contient une fonction par type d'envoi de mail, tu lui impose une dependance forte a tout le reste de ton framework...
    Oui, je m'en apercois maintenant que je veux la deployer pour d'autre projet


    Sinon, tu peux envisager une approche comme ca, basee sur des interfaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public bool SendFormattedMail(IBLLObject monObjet,IBLLFormatter monFormatter, IServiceProvider monService)
    {
    To = monObjet.GetRecipient();
    Body = monFormatter.GetBody(monObjet,monService);
     
    return this.Send();
    }
    et tu modifies tes classes pour qu'elles heritent des interfaces adequates
    Ca semble pas mal ca, mais je ne saisi pas tous
    Mes classes Service et Convoyeur sont déjà abstraite. Toutes les tables de la DB ont un Convoyeur et un Service qui sont généré par notre frameworks maison.

  6. #6
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Finalement, je vais revenir sur un solution simple, mettre le code commun dans la dll et hérité une classe dans chacun de mes projets :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    	/// <summary>
    	/// Description résumée de SendMailAuto.
    	/// </summary>
    	public class ServiceMailAuto : MailMessage
    	{
    		//Constructeur
    		public ServiceMailAuto()
    		{
    		}
     
    		/// <summary>
    		/// Obtient si le mail peux etre envoyé
    		/// </summary>
    		public bool canSend
    		{
    			get
    			{
    				object o = ConfigurationSettings.AppSettings["canSend"];
    				return (o==null?false:bool.Parse(o.ToString()));
    			}
    		}
     
    		/// <summary>
    		/// Send()
    		/// </summary>
    		public bool Send()
    		{
    			bool flag = true;
    			SmtpMail.SmtpServer = ConfigurationSettings.AppSettings["EmailServer"];
    			//si le serveur est en maintenance
    			if (!canSend)
    				return false;
     
    			try
    			{
    				SmtpMail.Send(this);
    			}
    			catch (Exception ex)
    			{
    				flag = false;
    				StreamWriter sw = new StreamWriter(ConfigurationSettings.AppSettings["Mail.log"],true);
    				sw.WriteLine(DateTime.Now + " " + this.Subject + " " + flag + " " + ex.Message);
    				sw.Close();				
    			}
    			finally
    			{
    				this.Attachments.Clear();
    				this.Body = "";
    				this.Bcc = "";
    				this.Cc = "";
    				this.From = "";
    				this.Subject = "";
    				this.To = "";
    			}
     
    			return flag;
    		}
     
     
    		/// <summary>
    		/// Mail generic avec retour d envoi
    		/// </summary>
    		/// <param name="To">To</param>
    		/// <param name="From">From</param>
    		/// <param name="Subject">Sujet</param>
    		/// <param name="Body">Corps</param>
    		/// <returns>est envoye ?</returns>
    		public bool MailGeneric(string To, string From, string Subject, string Body)
    		{
    			BodyFormat = MailFormat.Html;
    			this.From = From;
    			this.To = To;
    			this.Subject = Subject;
    			this.Body = Body;
    			return Send();
    		}
     
    		/// <summary>
    		/// mail d'erreur sur écriture fichier
    		/// </summary>
    		public bool MailErreur(string ErrorMessage)
    		{
    			BodyFormat = MailFormat.Html;
    			From = ConfigurationSettings.AppSettings["DoNotReplyEmail"];
    			To = ConfigurationSettings.AppSettings["TechAdmin"];
    			Subject = "Erreur ecriture fichier Saolog batch";
    			Body = "<div style='font-family: Verdana; font-size: 12px'>";
    			Body += "Erreur ecriture fichier Saolog batch";	
    			Body += ErrorMessage;
    			return Send();
    		}
     
     
    	}

Discussions similaires

  1. [POO] Variable réinitialisée dans une classe
    Par dragonfly dans le forum Général JavaScript
    Réponses: 27
    Dernier message: 04/12/2007, 12h06
  2. Utilisation d'une classe externe dans une DLL
    Par xChRiSx dans le forum C++
    Réponses: 6
    Dernier message: 04/06/2007, 09h32
  3. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  4. [POO] Problème inclusion dans une classe
    Par LordBob dans le forum Langage
    Réponses: 11
    Dernier message: 22/11/2005, 15h21
  5. Réponses: 6
    Dernier message: 23/09/2005, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo