473,396 Members | 1,891 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.

Plug-in architecture leads to version problems.

I have a .NET 1.1 C# app (lets call it MyApp.exe) which is designed to
do some boring thing (not important now) but it can be extended with
plug-ins. These plug-ins are subclasses of a type (PlugInBase)
contained in a shared assembly (MySDK.dll). At startup, MyApp.exe
reads the registry for a list of plug-in assemblies to load from the
GAC. These assemblies are instanciated (using Assembly.Load) and
searched for types that subclass MySDK.PlugInBase. When found, these
types are instanciated with Activator used normally.
From its inception, it was my intention to have others (3rd parties)

create the plugins. I xpected them to develop their plugin by
referencing MySDK.dll and implementing their own subclasses of
PlugInBase. Then, to integrate their plugin into MyApp, they need to
install their assembly into the GAC and add a registry entry requesting

MyApp to load it by name.

My initial testing worked well. I created projects within my main
VS.NET solution that contained implementations of PlugInBase and were
installed into the GAC with a post-build event. Everything seemed to
be fine... until I tried to separate the plug-in projects from the main

solution. It became a versioning nightmare.
What I have missed is the simple fact that MySDK.dll is strongly named
and everytime I fix a bug and release a new version of it (example
1.0.0.0 to 1.0.0.1), all plug-ins must be recompiled using the new
version of MySDK.dll. This is impractical, since it would require
massive coordination with 3rd party authors - some of whom I may not
know.
The solution I seek would allow me to patch MyApp.exe and MySDK.dll,
without requiring a recompile of the 3rd party plug-ins. Can this be
done?
I have pondered this question and have some thoughts and questions?
Can an assembly load event be hooked which allows me to substitute the
new assembly?
Would a config file setting help?
Should I change my plug-in communication from inprocess to something
else (maybe .NET remoting)?
Is there something in .NET 2.0 which can help? I don't want to
upgrade, but will if necessary.
Should i consider an interface only approach - removing my
implementation from the MySDK assembly and thereby minimizing the
number of updates to the assembly?
I welcome all ideas and advice

Jan 9 '06 #1
2 1104
Instead of using a base class that your plug-in authors must inherit
from, use an interface instead. The plug-in authors can create classes
that implement the interface. You can still use the same method for
detecting and loading the plug-ins, but when you fix a bug, it will not
affect the plug-ins because the interface will not have changed. The
only time the plug-ins will be affected will be if the interface itself
changes which should be rare or not at all.

Jan 9 '06 #2
"Chris Dunaway" <du******@gmail.com> wrote in message
news:11**********************@o13g2000cwo.googlegr oups.com...
Instead of using a base class that your plug-in authors must inherit
from, use an interface instead. The plug-in authors can create classes
that implement the interface. You can still use the same method for
detecting and loading the plug-ins, but when you fix a bug, it will not
affect the plug-ins because the interface will not have changed. The
only time the plug-ins will be affected will be if the interface itself
changes which should be rare or not at all.


To further add to Chris's post, I would also say to define the interface in
a separate DLL so that it is distributable to your 3rd parties.

Also, some may disagree, but I think it's a good idea to put a version
number in the interface name in this situation. For example, IFoo_v1. That
way any given assembly could support multiple versions of the interface and
keep them straight. Taking it one step further, you could define IFoo_Base
and derive IFoo_v1 and IFoo_v2, etc. from IFoo_Base if there is some common
base functionality to be supported.

-- Alan
Jan 9 '06 #3

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

Similar topics

9
by: Tian | last post by:
I am writing an audio game using Python. in this game you can apply some sound effects for the clips you have recorded. I want to make this function extensible. I want user to be able to add new...
2
by: Jesper | last post by:
Im creating a host application (a game) which allows for users to supply a custom computer AI. This will be in the form of a plugin assembly which supports a specified interface. So the host will...
1
by: gnuoytr | last post by:
being a retrograde vi kind of guy, i can run a vi-able editor when i use WSAD or Eclipse (both java programs), but i don't see any plug-in menu items here. any chance of getting plug-in support...
2
by: Kelvin | last post by:
To all, I've got another question. Does anybody know how to write plug-ins using VC++?? Actually, my friends and I will develop a Photo enhancing system, and so we'll need some technique to...
4
by: Brad Markisohn | last post by:
Is there a way to determine, programmatically, when Plug-and-Play devices are connected or removed from the PC? In VB 6 I caught events from the SysInfo control, but I don't believe that this...
0
by: Ant | last post by:
Sourceforge's Project of the Month (an IT monitoring system written using Zope and Twisted) is a good advert for Python: http://sourceforge.net/potm/potm-2007-03.php
1
by: =?Utf-8?B?YWxlb24=?= | last post by:
Plugin.ocx file continues to be removed when we run MS Updates. The databases are 2003 and forms don't work without the plugin.ocx. Tried making the .ocx file read only, but that didn't work. We...
8
by: Joe Kovac | last post by:
Hi! Is there any recommendation how to develop plugin-like Asp.Net pages? The use case: We have a framework, where you can administrate employees, customers, etc. Now, customers always want some...
19
by: jim | last post by:
(from http://www.news.com/8301-13578_3-9798715-38.html ) October 16, 2007 5:56 PM PDT RIAA tries to pull plug on Usenet. Seriously. Posted by Declan McCullagh The Recording Industry Association...
1
by: diwakar09 | last post by:
hi all, could you tell me how to write plugins for mac safari how to start, i have the dll's but i don't know how to start, pls. guide me, if possible send me some links from where i can access...
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
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
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
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.