У меня есть приложение Silverlight, которое имеет два разных XAP - InitialXAP, который статически загружается HTML-страницей, и DynamicXAP, который загружается из кода в исходном XAP. DynamicXAP загружается с кодом, подобным этому:
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);
У меня есть класс, который использует отражение (в частности, FieldInfo.GetValue) для привязки данных. Этот класс определен в InitialXAP. Если я пытаюсь использовать этот класс в DynamicXAP, я получаю сообщение об ошибке:
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)
Я могу обойти эту ошибку, создав подкласс класса с использованием отражения и переопределив метод с помощью отражения следующим образом:
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);
}
}
Но я бы предпочел избежать этого дублирования, разрешая отражение от InitialXAP в DynamicXAP. Любые идеи о том, что я могу сделать?