注: すべてのサンプル コードは大幅に簡略化されています。
次のように定義されたDLLがあります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;
namespace RIV.Module
{
public interface IModule
{
StringWriter ProcessRequest(HttpContext context);
string Decrypt(string interactive);
string ExecutePlayerAction(object ParamObjectFromFlash);
void LogEvent(object LoggingObjectFromFlash);
}
}
これで、私のソリューションの外で、他の開発者が具体的なクラスを定義し、それらをアプリの BIN フォルダーにドロップできるようになりました。たぶん次のようなもの:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RIV.Module;
namespace RIV.Module.Greeting
{
public class Module : IModule
{
public System.IO.StringWriter ProcessRequest(System.Web.HttpContext context)
{
//...
}
public string Decrypt(string interactive)
{
//...
}
public string ExecutePlayerAction(object ParamObjectFromFlash)
{
//...
}
public void LogEvent(object LoggingObjectFromFlash)
{
//...
}
}
}
さて、私のアプリでは、新しいモジュールが利用可能であることを知る必要があり (web.config またはそれらの行に沿って何かを推測しています)、データベースの Campaign テーブル (マップするもの) のトリガーに基づいてそれを呼び出すことができます。その特定のキャンペーンに使用するモジュールに)。
私はこの方法でインスタンス化しようとしています:
var type = typeof(RIV.Module.Greeting.Module);
var obj = (RIV.Module.Greeting.Module)Activator.CreateInstance(type);
ただし、参照がRIV.Module.Greeting.dllに設定されていないため、コンパイラはげっぷをします。
私は何を間違っていますか?