必要に応じて、インターフェイスに依存するソリューションを作成する必要があります。
基本的に、アプリケーションは IModule と呼ばれるインターフェイスを使用して API dll を公開します。IModule には、Run() というメソッドが 1 つあります。メイン アプリケーションは、モジュールのアセンブリを読み込み、IModule を実装するものを探し、それらのオブジェクトの 1 つを作成し、それに対して Run() を呼び出します。
これは、サンドボックスをホストして内部でモジュールを実行する方法を説明する古い記事です。
http://msdn.microsoft.com/en-us/magazine/cc163701.aspx
namespace MyApplication.Api
{
public interface IModule
{
void Run();
}
}
開発者はこのようなものを作成します
public class MyObject : MarshalByRefObject, IModule
{
public void Run()
{
// do something here
}
}
アプリケーションは、ある種のリフレクションでそれをロードします。
public void LoadModule()
{
var asm = System.Reflection.Assembly.Load(/* Get the developer module name from somewhere*/);
var types = asm.GetExportedTypes();
foreach(var t in types)
{
foreach(var i = t.GetInterfaces())
{
if(i == typeof(IModule))
{
var iModule = System.Activator.CreateInstance(t);
iModule.Run();
}
}
}
}
別の appDomain でコードを実行するのが最善ですが、複雑さが増します。
public void LoadModuleInAppDomain()
{
// Spin up a new AppDomain
// Load the assembly into the app domain
// Get the object
// Call the Run Method
}