Question

Je suis dans le grand dilemne .. Je travaille sur l'application Web hautement modulaire dans ASP.NET MVC 2 (en fait, le noyau sera super léger, tous les travaux sur les modules / plugins). J'ai trouvé très utile pour MEF découverte de modules, mais je ne veux pas nous comme conteneur IoC. Il y a de très bonnes chances que je vais avoir besoin de fonctionnalités avancées « true » conteneur IoC, donc je voudrais utiliser l'unité.

Et voici le problème: comment permettre aux modules de configurer conteneur (programatically) = enregistrer leurs propres types (contrôleurs, mvc implémentations personnalisées des services ...) au démarrage de l'application sans dépendance matérielle sur l'unité dans tous les modules? Je sais que sur le projet de services communs Locator, et il semble assez bon, mais ce conteneur co interface permet seulement résoudre les types, ne pas les enregistrer (afaik).

J'espère vraiment que vous pouvez comprendre mon point, je sais que mon anglais est horrible (je suis de pays qui ne parle pas anglais :) Merci beaucoup!

Était-ce utile?

La solution

Je peux certainement sympathiser avec ne pas vouloir utiliser comme un conteneur MEF DI, mais je pense que vous devriez toujours demander si cela pourrait ne pas être applicable pour vos compléments.

nécessitent déjà vos compléments à utiliser MEF , donc ils auront tous une dépendance dur là-dessus. Bien que je n'aime pas personnellement l'approche, basée sur les attributs codés en dur utilisé par le MEF, il semble que vous demandez comment chaque complément peut s'enregistrer avec le conteneur DI. Cela ressemble aussi à coder en dur pour moi, alors vous pourriez aussi bien il suffit d'utiliser tout le MEF dans.

Application d'attributs est Enregistrement des composants.

Si vous ne voulez pas vraiment utiliser MEF vous avez seulement quelques autres options (aucun d'entre eux particulièrement plus attrayante):

  • Exiger que tous les compléments à prendre également une dépendance pour l'unité. Je comprends parfaitement pourquoi vous ne voulez pas faire cela, mais je suis juste, y compris cette option pour être complet
  • Exiger que tous les compléments à prendre aussi une dépendance pour les services communs Locator. À mon avis, cela ne se déplace légèrement le problème.
  • Définissez votre propre interface d'enregistrement add-in que tous les compléments doivent mettre en œuvre. Vous pouvez alors écrire votre propre implémentation qui utilise l'unité, de sorte que tous les compléments s'enregistrent contre cette interface, mais vous plus ou moins être juste dupliquer les caractéristiques du MEF.
  • Ecrire tous les compléments dans un DI-friendly, mais conteneur agnostique le style . Cela laisse le problème avec la configuration du conteneur DI, et vous aurez alors recourir à la configuration XML pour cela. Ceci est un très fragile approche et peut rapidement conduire à maintainance enfer , donc une fois encore, je suis juste, y compris cette option pour être complet.

Utilisation MEF compléments ne vous empêche pas d'utiliser l'unité dans votre application de base, mais je comprends que c'est très léger, de sorte que ne peut pas faire beaucoup de sens.

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