J'ai une question stratégique pour mon projet C#. Je veux mettre en œuvre un concept de plugin et je me bats maintenant avec la meilleure façon pour les plugins de manipuler les données du projet principal. Dans un premier temps, j'ai créé un projet "Master" PlugIn qui définit l'interface pour les plugins et un attribut pour identifier une classe comme un plug-ins quand je le charge dans mon projet principal.Manipulation de données dans PlugIn-Concept
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public sealed class GraphViewerPlugInAttribute : Attribute
{
}
public interface IGraphViewerPlugIn
{
Panel GetRightSidePanel();
string Name();
}
Ce projet est ensuite référencé dans le projet principal et les plug-ins. Le plug-ins implémente l'interface ...
[GraphViewerPlugIn]
public class myTestPlugIn : IGraphViewerPlugIn
{
public Panel GetRightSidePanel()
{
Panel myPanel = new Panel();
myPanel.BackColor = System.Drawing.Color.Red;
return myPanel;
}
public string Name()
{
return "TestPlugIn";
}
}
... et le projet principal charge tous les plugins qui sont stockés dans un certain répertoire.
Cela fonctionne très bien jusqu'à présent, je peux obtenir le panneau spécial à partir du PlugIn, mais maintenant je veux manipuler les données du projet principal à partir du PlugIn. Quelle serait la meilleure façon de le faire? J'ai une sorte de classe de conteneur de données qui est définie dans le "Master Plugin Project" à l'esprit. Le plugin met les données dans ce conteneur et le projet principal sera reconnu par un événement que les données ont changé et peut maintenant regarder quelles données ont changé et ensuite appliquer les changements. Est-ce la bonne direction, qu'est-ce que je dois considérer et quelles techniques (c'est-à-dire les événements, les classes statiques ...) dois-je utiliser pour mettre en œuvre cela?