Tengo una aplicación Silverlight que tiene dos XAP diferentes: un InitialXAP que se carga estáticamente por la página HTML y un DynamicXAP que se carga desde el código dentro del XAP inicial. El DynamicXAP está cargado con un código similar a esto:Silverlight: ¿No se puede usar el reflejo en GetValue de un campo en XAP?
var asm = LoadAssemblyFromXap(stream, "DLLName");
// LoadAssemblyFromXAP will load the DynamicXAP as a file stream,
// unpack it and load DLLName as a dll.
var controllerType = asm.GetType("ClassNameToInstantiate_InsideAsm");
var constructor = controllerType.GetConstructor(Type.EmptyTypes);
return constructor.Invoke(null);
tengo una clase que utiliza la reflexión (específicamente FieldInfo.GetValue) para hacer los datos de unión. Esta clase se define en InitialXAP. Si trato de utilizar esta clase en el DynamicXAP, me sale un error:
Message: Unhandled Error in Silverlight Application System.FieldAccessException: Class.In.DynamicXAP.Which.Uses.The.Reflection.Class.In.InitialXAP
at System.Reflection.RtFieldInfo.PerformVisibilityCheckOnField(IntPtr field, Object target, IntPtr declaringType, FieldAttributes attr, UInt32 invocationFlags)
at System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency)
at System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck)
at System.Reflection.RtFieldInfo.GetValue(Object obj)
puedo solucionar este error creando una subclase de la clase mediante la reflexión y reemplazando el método utilizando la reflexión de este modo:
public class InitialXAP.ClassUsingReflection {
public virtual object GetValue()
{
return fieldInfo.GetValue(parent);
}
}
public class ClassUsingReflection : InitialXAP.ClassUsingReflection {
public override object GetValue()
{
return fieldInfo.GetValue(parent);
}
}
Pero preferiría evitar esta duplicación al permitir la reflexión desde InitialXAP en DynamicXAP. ¿Alguna idea sobre lo que puedo hacer?
-1 ¿por sugerir una alternativa? Entonces, básicamente, sugerir que esta podría no ser la mejor manera de hacerlo no es una respuesta útil. Lo suficientemente justo. Quizás los críticos en realidad deberían dar una respuesta a "esa manera de hacerlo" si sienten una gran inclinación a ignorar las alternativas :) –
Además uno, porque es una alternativa viable y mejor ... – stevenrcfox
Explicación de mi voto negativo: Lo leí "un poco del documento de Prism y no pude encontrar nada allí que parecía que me permitiría hacer llamadas XAP cruzadas o cablear los controles del usuario por convención. (Tal vez me perdí algo y ¿podrías señalarme el tema relevante?). En ausencia de esto, me pareció que esta no es una respuesta válida para mi pregunta. Y no, tampoco tengo una mejor manera. En este momento, solo estoy viviendo con la pequeña cantidad de duplicaciones, por lo que puedo tener enlaces automáticos según las convenciones, parece el mal menor. – Rohith