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...

Voici les parties de code que j'ai écrites jusqu'à présent :

Mon interface :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !!!