Welcome to Stratos!
Type type = typeof(Usuario);object usrRegistrado = Activator.CreateInstance(type);string result = type.InvokeMember("Nombre", BindingFlags.Default | BindingFlags.InvokeMethod, null, usrRegistrado, null).ToString();Response.Write(result);
Hola a todos,A ver si alguien me saca de la duda porque creo que puedo hacer algo chulo con reflection pero no lo consigo.Código: [Seleccionar]Type type = typeof(Usuario);object usrRegistrado = Activator.CreateInstance(type);string result = type.InvokeMember("Nombre", BindingFlags.Default | BindingFlags.InvokeMethod, null, usrRegistrado, null).ToString();Response.Write(result);Intento conseguir invocar un metodo de un objeto en tiempo de ejecucion, lo uso para enlazarlo a un formulario de una página web. Pero no se porque no funciona ya que tengo una clase con una propiedad publica que se llama Nombre y devuelve un string "Javi" a ver si alguien me sabe decir que es lo que no funciona.
Cita de: "Diferencial"Hola a todos,A ver si alguien me saca de la duda porque creo que puedo hacer algo chulo con reflection pero no lo consigo.Código: [Seleccionar]Type type = typeof(Usuario);object usrRegistrado = Activator.CreateInstance(type);string result = type.InvokeMember("Nombre", BindingFlags.Default | BindingFlags.InvokeMethod, null, usrRegistrado, null).ToString();Response.Write(result);Intento conseguir invocar un metodo de un objeto en tiempo de ejecucion, lo uso para enlazarlo a un formulario de una página web. Pero no se porque no funciona ya que tengo una clase con una propiedad publica que se llama Nombre y devuelve un string "Javi" a ver si alguien me sabe decir que es lo que no funciona.1- Te devuelve alguna excepción?2- Intenta a usar BindingFlags.Public | BindingFlags.Instance para la llamada en vez de las que tienes puestas. Si no prueba también con BindingFlags.InvokeMethod | BindingFlags.GetProperty (aunque yo creo que con Public e Instance debería funcionar...).Un saludo!Vicente
[AttributeUsage(AttributeTargets.Property,AllowMultiple = false)]public class UsuarioBinding : Attribute{ private string Menber_; public string Menber { get { return Menber_; } set { Menber_ = value; } } }
public class Usuario{ private string Nombre_ = "Javi"; [UsuarioBinding(Menber="Text")] public string Nombre { get { return Nombre_; } set { Nombre_ = value; } } private int TipoUsuario_ = 1; [UsuarioBinding(Menber="SelectedValue")] public int TipoUsuario { get { return TipoUsuario_; } set { TipoUsuario_ = value; } }}
<span>Nombre:</span> <span><asp:TextBox ID="Nombre" runat="server" OnDataBinding="UsuarioFormBinding"></asp:TextBox></span> <span>Tipo Usuario:</span> <span> <asp:DropDownList ID="TipoUsuario" runat="server" OnDataBinding="UsuarioFormBinding"> <asp:ListItem Text="Seleccione..." Value="" Selected="True" /> <asp:ListItem Text="Registrado" Value="1" /> <asp:ListItem Text="Administrador" Value="2" /> <asp:ListItem Text="SuperAdministrador" Value="3" /> </asp:DropDownList> </span>
protected void UsuarioFormBinding(object sender, EventArgs e) { Type objType = sender.GetType(); string property = objType.InvokeMember("ID", BindingFlags.InvokeMethod | BindingFlags.GetProperty, null, sender, null).ToString(); Type objUsuario = typeof(Usuario); object usrRegistrado = Activator.CreateInstance(objUsuario); PropertyInfo objField = objUsuario.GetProperty(property); UsuarioBinding objBinding = (UsuarioBinding)objField.GetCustomAttributes(typeof(UsuarioBinding), true)[0]; object[] param = new object[1]; param[0] = objUsuario.InvokeMember(property,BindingFlags.InvokeMethod | BindingFlags.GetProperty,null,usrRegistrado,null).ToString(); objType.InvokeMember(objBinding.Menber, BindingFlags.SetProperty, null, sender, param); }
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) DataBind(); }