J'ai une application qui utilise Managed Extensibility Framework (MEF) avec ASP.NET MVC 5. Cette architecture me permet d'avoir une conception enfichable où je peux créer plusieurs applications et les exécuter toutes en une seule application maître. Cela m'a également permis d'avoir une place centrale pour l'authentification et la validation/le chargement des permissions.Comment créer un wrapper pour l'attribut Export lors de l'utilisation de MEF avec C#?
Pour que MVC 5 fonctionne avec MEF, chaque contrôleur doit avoir une valeur d'exportation unique. Par conséquent, je dois ajouter ces deux codes de ligne à chacun de mon contrôleur
[Export("SomeUniqueValue1", typeof(IController))]
[PartCreationPolicy(CreationPolicy.NonShared)]
Pour la valeur d'exportation unique à chaque plug-in, je tiens à concaténer le nom du plug-in aux valeurs d'exportation. donc au lieu d'utiliser les 2 lignes ci-dessus, je vais utiliser quelque chose comme ça à la place
[Export("PluginName.SomeUniqueValue1", typeof(IController))]
[PartCreationPolicy(CreationPolicy.NonShared)]
Maintenant, j'espère gagner du temps de codage en éliminant les 2 lignes de code ci-dessus si un seul comme. J'espère que quelque chose comme la ligne ci-dessous
[MefExport("SomeUniqueValue1")]
Ensuite, la classe MefExport
, se chargera de la concaténation du nom du plugin au nom fourni, et appelle en quelque sorte la classe Export
et la PartCreationPolicy
Comment puis-je créer un classe "ie MefExport" qui s'étend Export
classe qui me permet d'ajouter le nom du plugin et appeler le Export
et le PartCreationPolicy
?
C'est ce que j'ai commencé avec
public class MefExport : ExportAttribute
{
public MefExport(string exportName)
{
string finalExportValue = Helpers.GetPluginName() + exportName;
new ExportAttribute(finalExportValue, typeof(IController));
}
}
La réponse donnée par Will Ray, est une bonne solution pour votre problème, mais je vous suggère d'être plus descriptif avec votre attribut d'exportation. Imo, '[MEFExport]' pourrait être mieux nommé comme quelque chose comme '[MEFControllerExport]' ou '[ControllerExport]'. De cette façon, vous aurez plus de place pour plus de définitions de plugin plus tard sans le problème d'être ambigu. – Silvermind