2010-07-21 4 views
1

Je dois déterminer la meilleure façon d'appeler une méthode statc que je connais uniquement lors de l'exécution au moment de l'exécution.Meilleure façon d'appeler une méthode configurable

Chaque client qui utilise mon logiciel a une méthode spéciale qui retourne la chaîne suctom. Je pense à mettre le nom de la méthode dans le fichier de configuration, puis l'appeler au moment de l'exécution.

Est-ce un bon moyen? Pourquoi pas une classe personnalisée implémentant une interface donnée?

Répondre

5

Cela devrait être mieux, OMI.

Vous pouvez mettre le nom complet de la classe dans la configuration, et instancier par réflexion:

Type t = Type.GetType(type_name_from_config); 

IGivenInterface obj = (IGivenInterface) Activator.CreateInstance(t); 
0

La magie de la réflexion!

using System.Reflection; 

var type = typeof(YourStaticClass); 
var customstring = type.InvokeMember 
(
    "methodname", 
    BindingFlags.InvokeMethod, 
    Type.DefaultBinder, 
    null, 
    null 
); 

De cette façon, vous pouvez stocker le nom de la méthode dans votre magasin utilisateur préféré en tant que chaîne simple. S'il s'agit d'un site ASP.NET, vous pouvez utiliser des profils utilisateur ou utiliser un stockage isolé ou des paramètres d'application définis par l'utilisateur.

1

Si chaque client doit fournir une chaîne qui n'est pas statique et doit être calculée au moment de l'exécution, puis une bonne solution serait de définir une interface telle que:

public interface ICustomerInfo 
{ 
    string CustomerStringValue { get; } 
} 

puis demander à chaque client à fournir écrire une classe qui implémente cette interface.

Un bon moyen de découvrir dynamiquement et de charger ces classes lors de l'exécution consiste à utiliser le framework d'extensibilité managée .NET (uniquement dans .NET 4.0). En utilisant MEF, vous pouvez découvrir automatiquement les assemblages dans un certain répertoire contenant des types implémentant une interface donnée. Vous pouvez utiliser un attribut 'Import' et faire en sorte que MEF active dynamiquement les instances de ces types lors de l'exécution et leur injecte des références dans votre objet.

Vous pouvez trouver plus d'informations sur MEF here.

Questions connexes