Question

(Cette question concerne spécifiquement C #, mais s'applique généralement à .NET)

J'ai une application assez longue, d'assez bonne conception et divisée en sections principales au-dessus d'interfaces (cela a été fait pour faciliter le développement parallèle).

Nous disposons maintenant d'un ensemble principal de classes concrètes implémentant les interfaces requises, mais nous disposons également d'ensembles supplémentaires de classes concrètes pour des situations et des tests alternatifs.

À l'heure actuelle, nous regroupons toutes ces classes au niveau supérieur du code:

IMyInterface xComponent = new ConcreteXComponent1();

Si je veux échanger des composants, il ne me reste plus qu'à changer cette ligne et à recompiler:

// IMyInterface xComponent = new ConcreteXComponent1();
IMyInterface xComponent = new ConcreteXComponentAlternative();

Cela fonctionne très bien, mais nécessite évidemment une recompilation - je préférerais que la classe concrète ait été choisie en utilisant une valeur provenant d'un fichier de configuration.

Quel est le modèle standard pour modifier des classes concrètes à l'aide d'un fichier de configuration? Existe-t-il une bibliothèque standard que je peux utiliser qui résout ce problème pour moi?

Merci!

Était-ce utile?

La solution

Vous voulez regarder les conteneurs IoC. (Spring.NET, StructureMap, Windsor, etc.)

Autres conseils

Vous pouvez utiliser la méthode Activator.CreateInstance . L'une des surcharges de méthodes prend un nom de type et en crée une instance à l'aide du constructeur par défaut. Ensuite, vous pouvez stocker le nom du type de la classe dans votre fichier de configuration et le lire à partir de votre application.

L'utilisation d'un conteneur IoC crée un pool ou une collection d'objets que vous pouvez charger dynamiquement. Les frameworks suggérés par Romain utiliseront un fichier de configuration décrivant les objets et leur instanciation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top