2010-11-29 5 views
2

Ce que j'essaie de faire est d'injecter un composant dans mon application MVC et de l'utiliser à partir des contrôleurs.MEF et MVC - quelques pointeurs s'il vous plaît :)

Actuellement, je n'essaie pas d'utiliser MEF pour les contrôleurs réels, mais je veux importer des composants par ex. Un composant de connexion dans l'application MVC.

Où est le meilleur endroit pour faire cela?

Actuellement j'ai, directement dans le contrôleur, mettre mon code de pièces de composition et propriété ILogger, mais j'ai l'impression que ce n'est pas la meilleure façon. Il semble que je devrais seulement besoin d'appeler Compose une fois dans l'application. Donc, devrait-il être dans le fichier asax global que je fais le composer? Si oui, comment puis-je gérer ILogger depuis mes contrôleurs? Devrais-je avoir un contrôleur "de base", où je injecte ILogger dans le constructeur et hérite de chaque contrôleur standard? L'espoir qui a du sens - Je me bats un peu avec la structure de mon code.

Thx

+0

http://www.fidelitydesign.net/?p=259 Cet article de blog pourrait vous aider. Tout tourne autour de MVC3 et MEF. – Buildstarted

+0

merci ... en effet, très utile. – SteveCl

+0

également ne pas oublier à ce sujet http://www.fidelitydesign.net/?p=88 – Kuncevic

Répondre

0

J'utilise Log4Net et injecter l'enregistreur dans chaque contrôleur. Je ne pense pas que c'est un grand succès lorsque vous utilisez l'injection. Jetez un oeil à Ninject. Il a à la fois une implémentation MVC et un module de journalisation. Les modules sont chargés une fois dans le global, puis ils injectent les contrôleurs. Basic DI, mais avez-vous vraiment besoin de plus? Si vous créez un contrôleur de base, vous devrez toujours créer un ctor dans chaque contrôleur pouvant être injecté.

Vous pouvez créer un contrôleur de base avec la journalisation, puis utiliser l'injection de propriété. Je n'ai jamais fait cela, mais si tous les contrôleurs utilisent la même base, cela devrait fonctionner correctement.

+0

Pour l'enregistreur, j'utilise une encapsulation statique de log4net. Rend vraiment facile de tout enregistrer. Et vous ne risquez pas d'avoir plus de loggers essayant d'accéder aux mêmes ressources. –

+0

J'utilise NLog ... pas que ça fait vraiment beaucoup de différence. Je commence à penser que Ninject ou windsor peut être une meilleure solution que MEF pour ce que je veux faire! @Paw ... créez-vous votre encapsulation statique dans global.asax? – SteveCl