[VB Net] Accéder à une variable du programme principal depuis une interface
Bonjour,
Je cherche à accéder à une variable (une SqlConnection) depuis une interface.
Je développe une appli à l'aide de plugin (j'ai suivi ce tuto http://drq.developpez.com/dotnet/articles/plugin/vbnet/). Passer des infos à mon interface, pas de problème, mais faire accéder mon interface à mon programme principal : j'y arrive pas... :oops:
Voici les parties de code que j'ai écrites jusqu'à présent :
Mon interface :
Code:
1 2 3 4 5 6 7
| Public Interface IPlugin
Function NomPlugin() As String
Function Menu() As System.Windows.Forms.UserControl
Sub ConnexionBaseDonnees(ByVal Connexion As System.Data.SqlClient.SqlConnection)
End Interface |
Mon programme principal :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| Imports System.IO
Public Class frmPrincipale
Private Sub frmPrincipale_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Refresh()
Connexion()
Dim RepertoirePlugin As New DirectoryInfo(Directory.GetCurrentDirectory + "\Plugin")
If RepertoirePlugin.Exists Then
Dim message As String = String.Empty
Dim frmSplash As New frmSplashRecherche
frmSplash.lblMessage.Text = "Chargement des modules..."
frmSplash.Show()
frmSplash.Refresh()
Try
For Each Fichier In Directory.GetFiles(RepertoirePlugin.FullName, "Plugin*.dll")
Dim obj As Object
obj = AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(Fichier, "PluginApp.PluginClass")
frmSplash.lblMessage.Text = "Chargement du module " + CType(obj, IPlugin.IPlugin).NomPlugin() + "..."
frmSplash.Refresh()
Dim ControlePlugin As UserControl = CType(obj, IPlugin.IPlugin).Menu
Dim BarreMenuPlugin As MenuStrip = CType(ControlePlugin.Controls.Item(0), MenuStrip)
BarreMenu.Items.AddRange(BarreMenuPlugin.Items)
CType(obj, IPlugin.IPlugin).ConnexionBaseDonnees(Fonctions.maConnexion)
Next
Catch ex As Exception
message = ex.Message
Finally
frmSplash.Close()
frmSplash.Dispose()
If message.Length > 0 Then
MsgBox("Le chargement d'un ou plusieurs module(s) a échoué." + vbCrLf + vbCrLf + "Message retourné : " + vbCrLf + vbCrLf + message, MsgBoxStyle.Critical, "Erreur lors du chargement des modules")
End If
End Try
End If
End Sub
End Class |
Mon plugin :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Public Class PluginClass
Implements IPlugin.IPlugin
Private maConnexion As SqlClient.SqlConnection
Private Sub AjouterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AjouterToolStripMenuItem.Click
Try
MsgBox(maConnexion.State)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Function NomPlugin() As String Implements IPlugin.IPlugin.NomPlugin
Return "Gestion des étiquettes"
End Function
Public Function Menu() As System.Windows.Forms.UserControl Implements IPlugin.IPlugin.Menu
Return Me
End Function
Public Sub ConnexionBaseDonnees(ByVal Connexion As SqlClient.SqlConnection) Implements IPlugin.IPlugin.ConnexionBaseDonnees
maConnexion = Connexion
MsgBox(maConnexion.State)
End Sub
End Class |
J'ai essayé de suivre la piste de la Réflexion mais sans succès (j'avoue que c'est un peux obscur pour moi aussi).
Si quelqu'un a un tuyau, un tuto ou autre, MERCI !!! :lol: