IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Problème avec les AppDomain


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Par défaut Problème avec les AppDomain
    Bonjour à tous,
    J'ai un problème avec ce tuto : http://vincentlaine.developpez.com/t...pdomain/vbnet/

    J'ai repris AssemblyLoader.dll ainsi qu'un grande partie du code :
    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
     
    Imports System.Reflection
     
    Public Class Loader
        Inherits MarshalByRefObject
        ' Methods
        Public Function CreateInstanceOf(ByVal index As Integer, ByVal typeName As String) As Object
            Return DirectCast(Me.assemblies.Item(index), Assembly).CreateInstance(typeName, True)
        End Function
     
        Public Sub Load(ByVal varassembly As String)
            Me.assemblies.Add([Assembly].Load(varassembly))
        End Sub
     
     
        ' Fields
        Private assemblies As ArrayList = New ArrayList
    End Class
    Les plugins que je voudrais chargé ont cet interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Interface IPlugin
            ' Methods
            Sub Onload()
            Sub OnUnload()
     
            ' Properties
            ReadOnly Property Author As String
            ReadOnly Property Name As String
            ReadOnly Property Version As String
        End Interface
    Pour les charger, j'utilise ces méthodes :
    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
    Private loader As Loader
        Private pluginsDomain As AppDomain
        Private PluginList As List(Of IPlugin)
    
        Public Sub New()
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
    
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            PluginList = New List(Of IPlugin)
            loader = New Loader()
            LoadPlugins()
        End Sub
    
    
        Public Sub LoadPlugins()
            Dim path As String = Application.StartupPath & "/Plugins/"
            If Not Directory.Exists(Application.StartupPath & "/Plugins/") Then
                Directory.CreateDirectory(Application.StartupPath & "/Plugins/")
            End If
            ' Création du domaine d'application et chargement de la librairie de chargement
            Dim setup As AppDomainSetup
            setup = AppDomain.CurrentDomain.SetupInformation
    
            setup.PrivateBinPath = path
            setup.ShadowCopyFiles = "false"
            Me.pluginsDomain = AppDomain.CreateDomain("pluginsDomain", Nothing, setup)
            Me.loader = CType(Me.pluginsDomain.CreateInstanceFromAndUnwrap("AssemblyLoader.dll", "AssemblyLoader.Loader"), Loader)
    
            Dim dir As DirectoryInfo = New DirectoryInfo(Path)
            Dim iplugins As IPlugin
            Dim i As Integer = 0
            Dim file As FileInfo
            Dim type As String
    
            For Each file In dir.GetFiles("*.dll")
                type = file.Name.Replace(file.Extension, "")
                Me.loader.Load(type)
                iplugins = CType(Me.loader.CreateInstanceOf(i, type & "." & type), IPlugin)
                Me.PluginList.Add(iplugins)
            Next
        End Sub

    Mon problème est que le cast ne veut pas se faire à la ligne coloré en rouge ci-dessus...


    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    C'est le casting lui-même qui plante, ou la méthode CreateInstanceFromAndUnwrap ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Par défaut
    Je pense :
    Impossible d'effectuer un cast du proxy transparent en type 'Loader'.

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo