Pregunta

Nota: Todo el código de muestra se simplifica enormemente.

Tengo una DLL definida como:

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);
    }
}

Ahora, fuera de mi solución, otros desarrolladores pueden definir clases concretas y dejarlas en la carpeta de contenedor de mi aplicación. Quizás algo como:

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)
        {
            //...
        }
    }
}

Ahora, en mi aplicación, necesitaría saber que había un nuevo módulo disponible (supongo que a través de Web.Config o algo así) y luego poder llamarlo basado en algún desencadenante en la tabla de campaña de la base de datos (que mapas al módulo para usar para esa campaña específica).

Estoy tratando de instanciarlo de esta manera:

var type = typeof(RIV.Module.Greeting.Module);
var obj = (RIV.Module.Greeting.Module)Activator.CreateInstance(type);

Sin embargo, el compilador eruckes porque una referencia nunca se estableció en Riv.module.greeting.dll!

¿Qué estoy haciendo mal?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top