Je ne cherche pas de code directement, mais pour quelques idées comment résoudre mon problème le mieux.Asp.net MVC - Comment réaliser des modules flexibles à utiliser cross-projet?
Il y a cette application mvc asp.net sur laquelle je travaille. Il devrait être «hautement modulaire» et de nombreuses parties doivent être réutilisées dans différents projets.
Notre approche actuelle utilise le cadre d'extensibilité géré pour importer des assemblages lors de l'exécution. Ceux-ci consistent généralement en tout ce qui est nécessaire pour travailler; modèles, vues et contrôleurs. Les routes et les boutons de navigation/menu principal sont enregistrés lors de l'importation. Cela fonctionne jusqu'à présent; Par exemple, je peux simplement copier l'assemblage "news-column" dans n'importe quel autre projet, inclure les choses MEF, et "magiquement" le nouveau projet sert une fonctionnalité de news accessible sur/News/List. Toutefois, le problème est que, dans la plupart des cas, la vue par défaut livrée dans l'assemblage convient, mais j'aimerais parfois que le contrôleur importé apparaisse avec une vue différente, affichant d'autres champs dans une disposition personnalisée. Mon approche actuelle consiste à rendre les méthodes d'action dans les modules virtuelles. Si un autre projet doit rendre la liste avec une vue personnalisée, je substitue simplement la méthode list, appelle la méthode de base pour remplir ViewData, puis appelle simplement la vue que je veux. Cependant, cela semble quelque peu sale et si quelqu'un connaît une meilleure solution, je l'apprécierais vraiment.
Un autre problème que je suis confronté est que je peux vouloir qu'un modèle importé fonctionne avec une table différente. Nous allons avec Fluent NHibernate où la table cible est définie dans ClassMap - Table ("News"). Mappages sont importés comme ceci:
foreach(Assembly assembly in assemblies)
configuration.Mappings(m => m.FluentMappings.AddFromAssembly(assembly));
Je ne pouvais pas comprendre comment changer la table d'une cartographie importée, mais je crois qu'il ya un moyen simple?
Merci pour au moins lire ce :)
Petit nitpick: MEF est l'abréviation de Managed Extensibility Framework, pas de Microsoft Extensibility Framework –
Absolument correct, désolé, je fais cette erreur tout le temps – Steffen