Примечание. Весь пример кода значительно упрощен.
У меня есть 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 !
Что я делаю не так?