Hola, estoy tratando de usar la reflexión C# para llamar a un método que se pasa un parámetro y, a cambio, devuelve un resultado. ¿Cómo puedo hacer eso? He intentado un par de cosas pero sin éxito. Estoy acostumbrado a PHP y Python, donde esto se puede hacer en una sola línea, así que esto es muy confuso para mí.Cómo utilizar el método de reflexión para llamar por nombre
En esencia, esto es cómo se hizo la llamada sin reflexión:
response = service.CreateAmbience(request);
solicitud tiene estos objetos:
request.UserId = (long)Constants.defaultAmbience["UserId"];
request.Ambience.CountryId = (long[])Constants.defaultAmbience["CountryId"];
request.Ambience.Name.DefaultText = (string)Constants.defaultAmbience["NameDefaultText"];
request.Ambience.Name.LanguageText = GetCultureTextLanguageText((string)Constants.defaultAmbience["NameCulture"], (string)Constants.defaultAmbience["NameText"]);
request.Ambience.Description.DefaultText = (string)Constants.defaultAmbience["DescriptionText"];
request.Ambience.Description.LanguageText = GetCultureTextLanguageText((string)Constants.defaultAmbience["DescriptionCulture"], (string)Constants.defaultAmbience["DescriptionDefaultText"]);
Ésta es mi función para poner en práctica la reflexión, donde serviceAction para el caso anterior sería "CreateAmbience":
public static R ResponseHelper<T,R>(T request, String serviceAction)
{
ICMSCoreContentService service = new ContentServiceRef.CMSCoreContentServiceClient();
R response = default(R);
response = ???
}
Gracias Jon, lo estoy intentando en este momento pero me t un error en la línea "object result = method.Invoke (service, new object [] {request});" - Desajuste del conteo de parámetros. – Martin
Lo he resuelto. Su solución funciona, pero el reflejo no recogió el contenedor de servicio que tomó 1 argumento. Gracias por tu ayuda. – Martin