Hace poco me enfrenté a este problema ... Me doy cuenta de que esta es una vieja pregunta, pero pensé que alguien podría encontrarle útil a la solución que encontré (usando net 4.0). Esta es la configuración que tenía:
public interface ISomeInterface{
String GetEntityType{ get; }
}
public abstract class BaseClass : ISomeInterface{
public String GetEntityType {
get{ return this.GetType().ToString(); }
}
}
public class ChildA : BaseClass { }
public class ChildB : BaseClass { }
Lo que hice fue crear un método de fábrica:
public static dynamic GetRealType { ISomeInterface param } {
return Activator.CreateInstance("dllname", param.GetEntityType);
}
Creación del objeto como un tipo dinámico fue lo resuelto por mí. Deduje el tipo por tener un método:
public void DoSomething<T>(T param){
IList<T> list = somecode...
}
esto me permitió hacer una llamada al método y dejar .net inferir el tipo
public void myMethod(ISomeInterface param) {
dynamic value = Factory.GetRealType (param);
DoSomething(value);
}
esperanza no hice todo confuso y en realidad ayuda, también, lo siento por el muro de texto
IList es una interfaz, por lo que no puede nuevo. Necesita un nuevo tipo que implemente IList como List . –