Silverlight: не Может использовать отражение для GetValue поля через XAPs?

У меня есть приложение Silverlight, которое имеет два различных XAPs - 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. Какие-либо идеи о том, что я могу сделать?

6
задан Rohith 13 January 2010 в 05:53
поделиться