2010-01-21 8 views
1

Le mécanisme modulaire PRISM natif prend en charge le chargement des modules par chemin d'assemblage, contenant ce module. Je souhaite disposer de la disponibilité pour stocker les vues des modules (XAML) dans la base de données afin que l'utilisateur final puisse les modifier et les personnaliser. La base de données est choisie car il est plus simple de stocker et d'extraire des informations et ne nécessite aucune recompilation ni création de binaires. Le problème est que View se compose de XAML et de codebehind et nous devons les diviser (?) Et les stocker séparément et quand nous en avons besoin, nous devons les indiquer et les charger au module (avec réflexion ou autre chose?) Mais je ne sais pas comment et si c'est possible du tout?Extension de l'approche modulaire de PRISM (CompositeWPF)

Répondre

1

Je vois deux options ici. Le moyen facile ou à la dure.

La manière la plus simple est d'avoir tous les assemblages sur le lecteur et d'avoir un catalogue de modules PRISM qui les charge en fonction des paramètres d'une base de données.

La difficulté consiste à placer les assemblys dans la base de données et à charger le catalogue de modules à partir de là. Vous devez encoder l'assembly, probablement en utilisant Base64, le placer dans la base de données, puis recharger l'assembly à partir de la base de données. Pour recharger un assembly à partir d'un enregistrement de base de données, vous pouvez utiliser le même mécanisme que DirectoryModuleCatalog. Copiez cette classe et modifiez-la afin qu'elle charge les assemblages du flux provenant de la base de données au lieu d'un fichier provenant d'un répertoire.

+0

Deux façons que vous avez conseillées ne diffèrent les unes des autres que par l'endroit, où les DLL sont stockées - dans le système de fichiers ou dans la base de données. Dans les deux cas, l'utilisateur doit changer XAML dans sourcecodes pour dll, le recompiler et le mettre à nouveau dans l'enregistrement de la base de données au lieu de la version précédente de dll. Cela oblige l'utilisateur à utiliser Visual Studio pour l'édition et à prendre connaissance des DLL de recompilation. Je voulais le libérer de ces devoirs pour sa simplicité. S'il pouvait seulement éditer XAML dans la base de données et ensuite l'application chargée dynamiquement (en utilisant Xaml Reader je suppose) dans le module. –

+0

Oh, je vois ce que tu veux dire. Je suppose que vous mettez une sorte d'écran de configuration dans votre application pour permettre à l'utilisateur d'activer/désactiver des modules, et ce paramètre est stocké quelque part, probablement la base de données. Vouliez-vous plus de personnalisation que cela? –

+0

Oui, je veux que l'utilisateur final puisse changer le XAML des vues stockées dans les modules et ces changements appliqués à la volée sans recompiler les dlls –