Click here to Skip to main content
16,004,406 members
Home / Discussions / C#
   

C#

 
GeneralRe: Method for erase textboxes by clicking a button Pin
Eddy Vluggen28-May-14 9:18
professionalEddy Vluggen28-May-14 9:18 
AnswerRe: Method for erase textboxes by clicking a button Pin
osamashatnawe29-May-14 0:27
osamashatnawe29-May-14 0:27 
QuestionHow to find interfaces in code programmatically Pin
Frygreen28-May-14 6:31
Frygreen28-May-14 6:31 
AnswerRe: How to find interfaces in code programmatically Pin
Richard MacCutchan28-May-14 6:40
mveRichard MacCutchan28-May-14 6:40 
AnswerRe: How to find interfaces in code programmatically Pin
Kornfeld Eliyahu Peter28-May-14 6:41
professionalKornfeld Eliyahu Peter28-May-14 6:41 
AnswerRe: How to find interfaces in code programmatically Pin
Eddy Vluggen28-May-14 7:21
professionalEddy Vluggen28-May-14 7:21 
AnswerRe: How to find interfaces in code programmatically Pin
jschell28-May-14 8:46
jschell28-May-14 8:46 
AnswerRe: How to find interfaces in code programmatically Pin
BobJanova29-May-14 1:20
BobJanova29-May-14 1:20 
Not sure why this is downvoted? Perhaps it was very bad pre-edit.

Anyway, what you are asking for is a classic plugin architecture, and that's a well solved problem. There are three steps to it:

  • Create a boundary interface that defines what the plugin should do. This interface should be in an assembly available to both the plugin developer (plugins need a compile time reference to the assembly) and the application. In the case of a releasable app or something where the same team develops both sides it can go in the main application assembly.
  • Create plugin classes which implement the interface and do the work.
  • Write some reflection code in your main application that finds instances of the plugins in relevant assemblies, and registers them.


The exact implementation of that depends on whether you need AppDomain separation between plugins (for example if you want to support plugin update or unloading without restarting the application, or different security contexts), and whether plugins will be in separate assemblies.

In this case the boundary interface is
public interface IReportGenerator {
 void Validate();
 void Execute();
}

... although I'd expect some form of input to be passed to both methods in reality.

The simplest version of the reflection code (look in a single assembly only) looks like this:

C#
public void RegisterPlugins(Assembly a) {
  foreach(Module mod in a.GetLoadedModules()){
    foreach(Type ty in mod.GetTypes()){
      foreach(Type intf in ty.GetInterfaces()){
        if(intf == typeof(IReportGenerator)){
          RegisterPlugin((IReportGenerator)Activator.CreateInstance(ty));
        }
      }
    }
  }
}


For a full implementation including looking up assemblies in a directory and loading each plugin into an AppDomain, check out my game lobby article[^] (LobbyClient/GameType.cs or LobbyServer/GameTypes.cs). Although don't necessarily copy the coding style in there, that is old code from before I knew what I was doing.
QuestionLoading and unloading assemblies using reflection Pin
nitin_ion28-May-14 1:38
nitin_ion28-May-14 1:38 
SuggestionRe: Loading and unloading assemblies using reflection Pin
Richard MacCutchan28-May-14 2:46
mveRichard MacCutchan28-May-14 2:46 
AnswerRe: Loading and unloading assemblies using reflection Pin
Rob Philpott28-May-14 4:52
Rob Philpott28-May-14 4:52 
QuestionInserting missing attributes in XML / app.config file Pin
Flockston8627-May-14 22:59
Flockston8627-May-14 22:59 
AnswerRe: Inserting missing attributes in XML / app.config file Pin
Dave Kreskowiak28-May-14 2:29
mveDave Kreskowiak28-May-14 2:29 
AnswerRe: Inserting missing attributes in XML / app.config file Pin
Flockston863-Jun-14 1:20
Flockston863-Jun-14 1:20 
GeneralRe: Inserting missing attributes in XML / app.config file Pin
Dave Kreskowiak3-Jun-14 2:14
mveDave Kreskowiak3-Jun-14 2:14 
GeneralRe: Inserting missing attributes in XML / app.config file Pin
Flockston863-Jun-14 2:25
Flockston863-Jun-14 2:25 
GeneralRe: Inserting missing attributes in XML / app.config file Pin
Dave Kreskowiak3-Jun-14 4:42
mveDave Kreskowiak3-Jun-14 4:42 
QuestionVisual Studio Output to Run as Admin always Pin
Subin Mavunkal27-May-14 22:57
Subin Mavunkal27-May-14 22:57 
AnswerRe: Visual Studio Output to Run as Admin always Pin
Richard MacCutchan28-May-14 0:53
mveRichard MacCutchan28-May-14 0:53 
Questioncustom file properties Pin
jeffingeorge27-May-14 22:38
jeffingeorge27-May-14 22:38 
AnswerRe: custom file properties Pin
Chris Quinn27-May-14 22:48
Chris Quinn27-May-14 22:48 
AnswerRe: custom file properties Pin
Eddy Vluggen28-May-14 0:28
professionalEddy Vluggen28-May-14 0:28 
QuestionFile opertions Pin
jeffingeorge27-May-14 22:36
jeffingeorge27-May-14 22:36 
AnswerRe: File opertions Pin
Karen Mitchelle27-May-14 22:51
professionalKaren Mitchelle27-May-14 22:51 
AnswerRe: File opertions Pin
Eddy Vluggen28-May-14 0:28
professionalEddy Vluggen28-May-14 0:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.