Monday, 9 March 2009

Load Assembly at runtime from another dll in C#

This example shows how to load a specialized version of Component implementation from from another dll during runtime. Define an interface in a Common project

namespace MyCompany.Common
{
  public interface Component
  {
    void Execute();
  }
}

Create specialized library that will be loaded at runtime and add reference to Common project.

using MyCompany.Common;
namespace MyCompany.Custom
{
  public class SampleComponent : Component
  {
    public void Execute()
    {
      Console.WriteLine("Sample Component");
    }
  }
}

Create your Console/Windows project and add a reference to Common project. Do not add reference to Custom one as this assembly will be loaded at runtime.

using MyCompany.Common;
namespace MyCompany.MyProgram
{
  static class Program
  {
    public static void Main()
    {
      string path = @"{your.dll.directory}\MyCompany.Custom.dll";
      Assembly a = Assembly.LoadFile(path);
      Component c = (Component)a.CreateInstance("MyCompany.Common.SampleComponent");
      c.Execute();
    }
  }
}

No comments:

Post a Comment