Dynamisch laden van assembly's

Ik heb een Class gemaakt met een enkele functie:

    public class Teus
    {
        public string Voornaam { get; set; }
        public string Achternaam { get; set; }

        public Teus()
        {
            Voornaam = "teus";
            Achternaam = "van Arkel";
        }

        public string GetName()
        {
            return Voornaam + " " +  Achternaam;
        }

    }

Vervolgens deze class gecompileerd en in de GAC geplaatst met de gacutil.exe etc.
Nou is het de bedoeling dat de velden van het type Teus en de methode GetName ingelezen en uitgevoerd wordt zonder dat er vanuit Visual Studio een reference naar de DLL gemaakt wordt.

Dat kan dus door mdiddel van Reflection, deze laadt je DLL, detecteerd de types en met method.invoke op het type kun je een methode uitvoeren zonder dat de DLL referenced is.
Code:

using System.Reflection;

namespace TestReflection
{
    class TestClass
    {
        public TestClass()
        {
            // Load assembly, let op dat fullname van de assembly gebruikt moet worden
            Assembly mijnAssemblies = Assembly.Load("Teus, version=1.0.0.0, Culture=neutral, publickeytoken=895334c20eebf7ef");
            
            // Haal de Type uit de assembly
            Type type = mijnAssemblies.GetType("Test.Teus");

            // Initiliseer het ojbect
            var mijnTeus = Activator.CreateInstance(type);
            
            // Invoke method
            object vollname = type.InvokeMember("GetName", BindingFlags.InvokeMethod, null, mijnTeus, null);
            
            // En hij doet het !
            MessageBox.Show(vollname.ToString());
        }
    }
}

Je kunt ook een tussenstap gebruiken en de method ophalen via methodinfo, zie voorbeeld:

namespace TestReflection
{
    class TestClass
    {
        public TestClass()
        {
            // Load assembly, let op dat fullname van de assembly gebruikt moet worden
            Assembly mijnAssemblies = Assembly.Load("Teus, version=1.0.0.0, Culture=neutral, publickeytoken=895334c20eebf7ef");
            
            // Haal de Type uit de assembly
            Type type = mijnAssemblies.GetType("Test.Teus");

            // Initiliseer het ojbect
            var mijnTeus = Activator.CreateInstance(type);
            
            // Invoke method
            MethodInfo method = t.GetMethod("GetName");
            method.Invoke(this, null);
            
            // En hij doet het !
            MessageBox.Show(vollname.ToString());
        }
    }
}



{{opmerking.Naam}}:

{{opmerking.OpmerkingText}}

            

Saving your comment....

Naam is verplicht!
Email is verplicht!
Opmerking is verplicht!