473,396 Members | 1,996 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Plugins and Late Binding

Hi,
I have some code to load some plug-ins, but the code requires me to know
the name of the class to load (here: SamplePlugin, derived from IPlugin) :

(Here is some C# code, but I use VB.Net to code my program)
using System;
using System.Reflection;

public class Driver
{
static void Main()
{
Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin");
IPlugin plugin = (IPlugin) Activator.CreateInstance(t);
plugin.SayHello();
}
}

The problem is, I don't want to have to know the name of the class I want to
load... I want to load the new module and get an instance of the class that
derives IPlugin. Is there a way to do so?

In C++ for the same purpose, I had a win32 dll with an extern function that
returned an instance of the contained class, so I loaded the dll, called the
function and I was ready to proceed. Is there something similar I can do
with .NET class libraries?

thanks

Jul 21 '05 #1
5 1433
ThunderMusic wrote:
I have some code to load some plug-ins, but the code requires me to know
the name of the class to load (here: SamplePlugin, derived from IPlugin) : Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin"); The problem is, I don't want to have to know the name of the class I want to
load... I want to load the new module and get an instance of the class that
derives IPlugin. Is there a way to do so?


foreach (Type Exported in assembly.GetExportedTypes())
if (Exported.IsClass && Exported.GetInterface("IPlugin", true) !=
null)
;

--

www.midnightbeach.com
Jul 21 '05 #2
Or you can put the plugins in a "plugins" folder

http://www.geocities.com/jeff_louie/OOP/oop13.htm

Regards,
Jeff
The problem is, I don't want to have to know the name of the class I

want to
load.<

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Jul 21 '05 #3
Hello,
I have 'played around' with using plugins and came across the same
issue. One way around is to create an attribute that can only be used one
and only in a '[assembly:xxxx]' level. The attribute constructor can take a
string for description and a string or a type for another. Then when you
load that assembly just look for your assembly-based attribute and you will
have an indication of the class that you can instantiate. Also, in the
construct of your attribute you could check that the type you pass it is
compatible with your IPlugin interface.

Hope this helps, If you have any problems then drop me a line!

Alan Seunarayan
"Jon Shemitz" <jo*@midnightbeach.com> wrote in message
news:41***************@midnightbeach.com...
ThunderMusic wrote:
I have some code to load some plug-ins, but the code requires me to
know
the name of the class to load (here: SamplePlugin, derived from IPlugin)
:

Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin");

The problem is, I don't want to have to know the name of the class I want
to
load... I want to load the new module and get an instance of the class
that
derives IPlugin. Is there a way to do so?


foreach (Type Exported in assembly.GetExportedTypes())
if (Exported.IsClass && Exported.GetInterface("IPlugin", true) !=
null)
;

--

www.midnightbeach.com

Jul 21 '05 #4
Hello,
I have 'played around' with using plugins and came across the same
issue. One way around is to create an attribute that can only be used one
and only in a '[assembly:xxxx]' level. The attribute constructor can take a
string for description and a string or a type for another. Then when you
load that assembly just look for your assembly-based attribute and you will
have an indication of the class that you can instantiate. Also, in the
construct of your attribute you could check that the type you pass it is
compatible with your IPlugin interface.

Hope this helps, If you have any problems then drop me a line!

Alan Seunarayan

"Jon Shemitz" <jo*@midnightbeach.com> wrote in message
news:41***************@midnightbeach.com...
ThunderMusic wrote:
I have some code to load some plug-ins, but the code requires me to
know
the name of the class to load (here: SamplePlugin, derived from IPlugin)
:
Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin");

The problem is, I don't want to have to know the name of the class I want
to
load... I want to load the new module and get an instance of the class
that
derives IPlugin. Is there a way to do so?


foreach (Type Exported in assembly.GetExportedTypes())
if (Exported.IsClass && Exported.GetInterface("IPlugin", true) !=
null)
;

--

www.midnightbeach.com

"ThunderMusic" <NO*******@sympatico.caSPAMATALL> wrote in message
news:ue**************@TK2MSFTNGP12.phx.gbl... Hi,
I have some code to load some plug-ins, but the code requires me to
know
the name of the class to load (here: SamplePlugin, derived from IPlugin) :

(Here is some C# code, but I use VB.Net to code my program)
using System;
using System.Reflection;

public class Driver
{
static void Main()
{
Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin");
IPlugin plugin = (IPlugin) Activator.CreateInstance(t);
plugin.SayHello();
}
}

The problem is, I don't want to have to know the name of the class I want
to
load... I want to load the new module and get an instance of the class
that
derives IPlugin. Is there a way to do so?

In C++ for the same purpose, I had a win32 dll with an extern function
that
returned an instance of the contained class, so I loaded the dll, called
the
function and I was ready to proceed. Is there something similar I can do
with .NET class libraries?

thanks

Jul 21 '05 #5
You could also just drop plugins in your plugin directory, get the public
class names and pick those that supports your interface...

Patrice

--

"Alan Seunarayan" <so****@ntlw0rld.c0m> a écrit dans le message de
news:EC*****************@newsfe3-gui.ntli.net...
Hello,
I have 'played around' with using plugins and came across the same
issue. One way around is to create an attribute that can only be used one
and only in a '[assembly:xxxx]' level. The attribute constructor can take a string for description and a string or a type for another. Then when you
load that assembly just look for your assembly-based attribute and you will have an indication of the class that you can instantiate. Also, in the
construct of your attribute you could check that the type you pass it is
compatible with your IPlugin interface.

Hope this helps, If you have any problems then drop me a line!

Alan Seunarayan

"Jon Shemitz" <jo*@midnightbeach.com> wrote in message
news:41***************@midnightbeach.com...
ThunderMusic wrote:
I have some code to load some plug-ins, but the code requires me to
know
the name of the class to load (here: SamplePlugin, derived from IPlugin) :

Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin");

The problem is, I don't want to have to know the name of the class I want to
load... I want to load the new module and get an instance of the class
that
derives IPlugin. Is there a way to do so?


foreach (Type Exported in assembly.GetExportedTypes())
if (Exported.IsClass && Exported.GetInterface("IPlugin", true) !=
null)
;

--

www.midnightbeach.com

"ThunderMusic" <NO*******@sympatico.caSPAMATALL> wrote in message
news:ue**************@TK2MSFTNGP12.phx.gbl...
Hi,
I have some code to load some plug-ins, but the code requires me to
know
the name of the class to load (here: SamplePlugin, derived from IPlugin) :
(Here is some C# code, but I use VB.Net to code my program)
using System;
using System.Reflection;

public class Driver
{
static void Main()
{
Assembly assembly = Assembly.LoadFrom ("myplugin.dll");
Type t = assembly.GetType ("SamplePlugin");
IPlugin plugin = (IPlugin) Activator.CreateInstance(t);
plugin.SayHello();
}
}

The problem is, I don't want to have to know the name of the class I want to
load... I want to load the new module and get an instance of the class
that
derives IPlugin. Is there a way to do so?

In C++ for the same purpose, I had a win32 dll with an extern function
that
returned an instance of the contained class, so I loaded the dll, called
the
function and I was ready to proceed. Is there something similar I can do with .NET class libraries?

thanks


Jul 21 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: JD Kronicz | last post by:
Hi .. I have an issue I have been beating my head against the wall on for some time. I am trying to use late binding for MS graph so that my end users don't have to worry about having the right...
14
by: Composer | last post by:
I've read many postings about the problem of Access.References.IsBroken and the consensus seems to be that late binding is the cure-all. I have a very complex Access application that needs...
9
by: Zlatko Matiæ | last post by:
I was reading about late binding, but I'm not completely sure what is to be done in order to adjust code to late binding... For example, I'm not sure if this is correct: early binding: Dim ws...
5
by: ThunderMusic | last post by:
Hi, I have some code to load some plug-ins, but the code requires me to know the name of the class to load (here: SamplePlugin, derived from IPlugin) : (Here is some C# code, but I use VB.Net to...
5
by: eBob.com | last post by:
In another thread VJ made me aware of Tag. Fantastic! I've been wanting this capability for a long time. But it seems that I cannot use it with Option Strict On. In an event handler I have ......
30
by: lgbjr | last post by:
hi All, I've decided to use Options Strict ON in one of my apps and now I'm trying to fix a late binding issue. I have 5 integer arrays: dim IA1(500), IA2(500), IA3(500), IA4(500), IA5(500) as...
6
by: Tim Roberts | last post by:
I've been doing COM a long time, but I've just come across a behavior with late binding that surprises me. VB and VBS are not my normal milieux, so I'm hoping someone can point me to a document...
3
ADezii
by: ADezii | last post by:
The process of verifying that an Object exists and that a specified Property or Method is valid is called Binding. There are two times when this verification process can take place: during compile...
14
by: Siv | last post by:
hi, I am converting an application that writes to an Excel spreadsheet and the code trips the "option Strict" that I would like on because the parser says "option Strict On disallows late...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.