Caricare dinamicamente assembly tramite Reflection

di Stefano Mostarda, in ASP.NET 2.0, Reflection,

Molto spesso si ha la necessità di istanziare classi senza sapere quale sia il tipo effettivo da istanziare. Un esempio classico sono le applicazioni che devono essere in grado di girare su più database. In questi casi torna più utile avere un'interfaccia di base che poi viene sfruttata dalle classi reali che accedono al database (OracleDataLayer, SqlServerDataLayer, ecc ).

namespace ExternalAssembly {
  public interface IClasse {
    string HelloWorld();
  }

  public class ClasseEx : IClasse {
    public string HelloWorld(){
      return "Hello Classe Ex";
    }
  }

  public class ClasseEx2 : IClasse{
    public string HelloWorld(){
      return "Hello ClasseEx2";
    }
  }
}

Una volta definita la base e le classi concrete, si può utilizzare la reflection per creare la classe concreta che si vuole utilizzare.

static ExternalAssembly.IClasse CreaClasse(string className, string assemblyName)
{
  return (ExternalAssembly.IClasse)Assembly.Load(assemblyName).CreateInstance(className);
}

protected void ddl_SelectedIndexChanged(object sender, EventArgs e) {
  string className = ddl.SelectedValue;
  string assemblyName = "ExternalAssembly";
  ExternalAssembly.IClasse classe = CreaClasse(className, assemblyName);
  lbl.Text = classe.HelloWorld();
}

Tramite la classe System.Reflection.Assembly si carica l'assembly con le classi sfruttando il metodo Load, e tramite il metodo CreateInstnce si istanzia l'oggetto desiderato. Successivamente si effettua il casting al tipo base e si sfrutta la sua interfaccia.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi