2009-11-10 8 views
2

J'ai écrit un programme utilisant Domain Driven Design dans .NET 2.0 et j'essaye d'implémenter un framework de plugin pour cela.Utilisation de l'IoC pour résoudre les types chargés dynamiquement

J'ai mis plusieurs types de plug-ins:

  • Domaine Plugin

    • Un agrégat de domaine composé d'une ou plusieurs classes de domaine
    • Un ou plusieurs Afficher/paires de présentateur à afficher instances de l'agrégat
    • Un service d'importation/exportation spécifique à l'agrégat de domaine
    • Une classe de dépôt
  • service Plugins

    • Database Plugin (intégré ou à distance)
    • services d'import/export générales (cvs, les formats XML, les données de concurrents, etc.)

Comme vous pouvez le voir, certains plugins touchent toutes les couches de l'architecture. Vous pourriez dire que les plugins de domaine sont des applications miniatures qui dépendent simplement de l'application principale pour fournir un cadre dans lequel s'exécuter. Le but ultime est de permettre à l'utilisateur d'acheter et de télécharger uniquement les plugins dont il a besoin. Je les ai écrits en tant que dépendances statiques au début parce que je n'avais pas mis en place un mécanisme pour les charger dynamiquement. Maintenant j'essaye de m'attaquer au chargement dynamique.

J'essaie d'utiliser un conteneur IoC pour gérer les dépendances mais j'ai du mal à trouver comment trouver et charger les plugins. En plus des interfaces que chaque plugin expose à l'application principale, les classes avec chaque plugin ont aussi leurs propres interfaces qu'ils utilisent pour communiquer entre eux. J'utilise Castle Windsor comme conteneur IoC et j'aimerais profiter de ses capacités d'autowiring aussi bien dans l'application que dans chaque plugin.

Comment puis-je:

  1. Rechercher et charger dans les implémentations Windsor d'une interface spécifique
  2. Windsor résout le Assurez-vous corriger une

Si vous pensez que je vais sur ce mauvais Je ne sais pas comment le dire. J'ai encore le temps de changer le design avant la date limite.

Répondre

3

Vous pouvez utiliser quelque chose comme le Managed Extensibility Framework de découvrir et d'énumérer vos plugins lors de l'exécution. Les plugins peuvent ensuite enregistrer les types nécessaires avec votre conteneur IoC lorsqu'ils sont découverts.

+0

Malheureusement MEF a été construit sur le .NET 3.5 et cette application cible .NET 2.0. (Principalement parce que certains de mes clients utilisent toujours Windows 2000) –

+0

Oh désolé, j'ai raté ça. – GraemeF