2009-05-25 5 views
3

Nous avons une interface qui sera implémentée par les classes qui prennent en charge le transport de données sur le réseau ou les ports par exemple.Paramètres spécifiques aux pièces avec MEF

Appelons-le IDataTransporter pour l'instant et nous avons 2 implémentations:

ComPortDataTransporter et TcpDataTransporter.

De toute évidence, ces deux nécessitent une configuration très différente. Le premier a des paramètres tels que le buadrate, les bits de démarrage/d'arrêt, etc. le second a des paramètres tels que l'adresse IP et le port.

Existe-t-il des bonnes pratiques pour gérer cela? En fin de compte nous voulons que l'utilisateur puisse charger une "partie" et la configurer une fois.

Thnx.

Répondre

4

Vous pourriez peut-être exporter une sorte de pièce de configuration avec votre pièce de transport.

Disons que votre application hôte définit une interface:

public interface IDataTransporterSettings 
{ 
    // any common settings are defined here 
} 

... et suppose que tout IDataTrasporter possède une propriété publique de ce type:

public interface IDataTransporter 
{ 
    IDataTransporterSettings Settings { get; } 
} 

... alors vos paramètres » "pourrait être une classe avec un groupe de propriétés publiques correspondant à chacun des paramètres:

public class TcpDataTransporterSettings : IDataTransporterSettings 
{ 
    public string Address { get; set; } 
    public int Port { get; set; } 
} 

Votre classe TcpDataTransporter, donc, lirait toujours à partir de sa propriété Settings pour déterminer son adresse/port/quoi que ce soit.

Maintenant, votre application hôte peut utiliser la réflexion pour inspecter les paramètres de chacune de ses parties importées et afficher un contrôle approprié pour chaque propriété publique (un TextBox pour les chaînes, un NumericUpDown pour ints etc.).

Je suppose qu'avec un peu de travail, vous pouvez ajouter des descriptions lisibles par l'homme à chaque propriété via les attributs, afin que vous puissiez définir l'étiquette de chaque contrôle dans l'interface utilisateur.

Je n'ai pas entièrement réfléchi à cela, et je ne l'ai certainement pas implémenté nulle part, mais il semble que ce pourrait être un moyen de fournir des paramètres flexibles pour chaque pièce importée.

+0

Cela semble être une bonne idée, ne sera pas encore la réponse, mais je pourrais le faire. Ce que j'ai maintenant est un Dictionary dans le cadre de l'interface IDataTransporter. Je vais regarder dans cette solution aussi. Je me demande si les assemblys peuvent avoir leur propre fichier de configuration .xml .... – TimothyP

Questions connexes