【发布时间】:2010-05-03 04:44:14
【问题描述】:
我试图在我的 Windows Phone 7 项目中使用 Unity 2.0 beta 2 for Silverlight,但我一直遇到这个崩溃:
Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.DynamicMethodConstructorStrategy() + 0x1f 字节
Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.DynamicMethodConstructorStrategy() + 0x1f 字节 mscorlib.dll!System.Reflection.RuntimeConstructorInfo.InternalInvoke(System.Reflection.RuntimeConstructorInfo rtci = {System.Reflection.RuntimeConstructorInfo} , System.Reflection.BindingFlags invokeAttr = Default, System.Reflection.Binder binder = null, object parameters = {object[0]}, System.Globalization.CultureInfoculture = null, bool isBinderDefault = false, System.Reflection.Assembly caller = null, bool verifyAccess = true, ref System.Threading.StackCrawlMark stackMark = LookForMyCaller) mscorlib.dll!System.Reflection.RuntimeConstructorInfo.InternalInvoke(object obj = null, System.Reflection.BindingFlags invokeAttr = Default, System.Reflection.Binder binder = null, object[] parameters = {object[0]}, System.Globalization .CultureInfo 文化 = null,参考 System.Threading.StackCrawlMark stackMark = LookForMyCaller) + 0x103 字节 mscorlib.dll!System.Activator.InternalCreateInstance(System.Type type = {Name = "DynamicMethodConstructorStrategy" FullName = "Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy"}, bool nonPublic = false, ref System.Threading.StackCrawlMark stackMark = LookForMyCaller) + 0xf0 字节 mscorlib.dll!System.Activator.CreateInstance() + 0xc 字节 Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.ObjectBuilder2.StagedStrategyChain.AddNew(Microsoft.Practices.Unity.ObjectBuilder.UnityBuildStage stage = Creation) + 0x1d 字节 Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.Unity.UnityDefaultStrategiesExtension.Initialize() + 0x6c 字节 Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.Unity.UnityContainerExtension.InitializeExtension(Microsoft.Practices.Unity.ExtensionContext context = {Microsoft.Practices.Unity.UnityContainer.ExtensionContextImpl}) + 0x31 字节 Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.Unity.UnityContainer.AddExtension(Microsoft.Practices.Unity.UnityContainerExtension 扩展 = {Microsoft.Practices.Unity.UnityDefaultStrategiesExtension}) + 0x1a 字节 Microsoft.Practices.Unity.Silverlight.dll!Microsoft.Practices.Unity.UnityContainer.UnityContainer() + 0xf 字节我想我可以解决它,我尝试了一些方法,但无济于事。
事实证明这是一个相当基本的问题,我认为 Windows Phone 7 是 Silverlight 3 + 其他一些东西的假设是错误的。这个page 描述了Mobile Silverlight 和Silverlight 3 之间的区别。
特别感兴趣的是:
Silverlight for Windows Phone 不支持 System.Reflection.Emit 命名空间。
这正是 Unity 在手机上崩溃的原因,DynamicMethodConstructorStrategy 类非常广泛地使用 System.Reflection.Emit...
所以问题是,Windows Phone 7 有哪些 Unity 替代方案?
【问题讨论】:
-
将此作为错误报告给 Unity 团队。 Silverlight 和 Windows Phone 应该有相同的 API(除了 windows phone 有一些额外的东西)。
-
这并不是真正的错误。 Silverlight3 和 Windows Phone Silverlight 之间存在巨大差异。 unity 团队意识到了这一点:unity.codeplex.com/Thread/View.aspx?ThreadId=207143 也许他们发布了支持电话的版本。
标签: dependency-injection windows-phone-7 unity-application-block