2010-05-25 2 views
0

Je suis en train de construire un objet d'aide qui a une propriété appelée Mailer. En réalité, Mailer peut être un System.Net.Mail.MailMessage ou un Mono.System.Net.Mail.MailMessage. Donc je préférerais seulement 1 déclaration de mailer.C# comment lancer dynamiquement un objet?

Par exemple, je ne veux pas:

private Mono.Mailing.MailMessage MonoMessage = new Mono.Mailing.MailMessage(); 
private System.Net.Mail.MailMessage MailMessage = new System.Net.Mail.MailMessage(); 

Je préfère

object mailer; 

ensuite dans le constructeur

switch (software) 
      { 
       case EnunInternalMailingSoftware.dotnet: 
        this.mailer = new System.Net.Mail.MailMessage(); 
        break; 
       case EnunInternalMailingSoftware.mono: 
        this.mailer = new Mono.Mailing.MailMessage(); 
        break; 
      } 

Le problème est que Mailer n'a pas de propriétés au moment de la conception . Donc je ne peux pas compiler mon code.

Comment cela peut-il être corrigé, est-ce que je prends la bonne approche. Merci à l'avance

Répondre

8

Vous devez utiliser le modèle d'adaptateur pour cela: http://en.wikipedia.org/wiki/Adapter_pattern

Définir une interface qui couvre les méthodes dont vous avez besoin (par exemple SendMail()), puis d'écrire une simple classe d'adaptation pour chaque objet MailMessage qui implémente l'interface et délègue aux méthodes correctes sur la classe MailMessage spécifique.

+0

pouvez-vous s'il vous plaît fournir quelques grandes lignes? –

+1

@JL - Définit une interface IMailer qui contient les méthodes que vous souhaitez appeler. Ensuite, vous créez une classe MonoMailerAdapter qui implémente cette interface et contient une instance de la classe Mono Mailer à laquelle elle peut déléguer des appels de méthode. De même, créez un adaptateur pour la version System.Net. Ensuite, votre champ «objet mailer» devient «IMailer mailer»; – Paolo

+0

merci beaucoup - recherche maintenant. –

Questions connexes