gpt4 book ai didi

Silverlight:不能使用反射来跨 CAP 获取字段的值?

转载 作者:行者123 更新时间:2023-12-04 16:03:08 27 4
gpt4 key购买 nike

我有一个 Silverlight 应用程序,它有两个不同的 XAP——一个由 HTML 页面静态加载的 InitialXAP 和一个从初始 XAP 中的代码加载的 DynamicXAP。 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)来进行数据绑定(bind)的类。此类在 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);
}
}

但我宁愿通过允许 DynamicXAP 中的 InitialXAP 进行反射来避免这种重复。关于我能做什么的任何想法?

最佳答案

虽然有一个学习曲线,但我会看看 Silverlight MEF 或 Prism(两者终于在最新的 Prism 4 Beta 中结合在一起)。它们都支持模块的动态加载,并为重用和单独/团队开发强制执行良好的模式。

关于Silverlight:不能使用反射来跨 CAP 获取字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2054734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com