我们有一个Windows 10 UWP应用程序,可以在Debug版本下运行,并在Release版本下崩溃。它使崩溃的版本构建的内容是启用了.NET Native工具链 - 禁用允许应用程序运行的版本。但这不是一个真正的解决方案,因为如果您打算发布到商店,它需要与.NET Native工具链一起运行。
我们使用Microsoft.Practices.Unity进行DI。以下是我们如何注册某些类的示例:
[Authorize]
public IHttpActionResult Post(Review review)
{
var user = this.User as ClaimsPrincipal;
if(!user.HasClaim("IsAdmin", "true"))
{
return Unauthorized();
}
if (!ModelState.IsValid)
{
return BadRequest(this.ModelState);
}
_repo.SaveReview(review);
return Created("/reviews/" + review.Id, review);
}
然后,在我们的应用程序中,我们按如下方式解决:
container.RegisterType<IBoardView, BoardView>();
除非我使用.NET Native运行它,否则它会正常工作,在这种情况下我得到以下异常:
Microsoft.Practices.Unity.dll中出现“Microsoft.Practices.Unity.ResolutionFailedException”类型的异常,但未在用户代码中处理
其他信息:依赖项的解析失败,type =“WindowsUniversal.ViewModels.Interfaces.IBoardViewModel”,name =“(none)”。
在解析时发生异常。
在输出窗口中,我得到:
抛出异常:System.Linq.Expressions.dll中的'System.NullReferenceException'
抛出异常:Microsoft.Practices.Unity.dll中的'System.NullReferenceException'
抛出异常:Microsoft.Practices.Unity.dll中的“Microsoft.Practices.Unity.ResolutionFailedException”
Microsoft.Practices.Unity.dll中出现“Microsoft.Practices.Unity.ResolutionFailedException”类型的异常,但未在用户代码中处理
其他信息:依赖项的解析失败,type =“WindowsUniversal.ViewModels.Interfaces.IBoardViewModel”,name =“(none)”。
在解析时发生异常。
异常是:NullReferenceException - 未将对象引用设置为对象的实例。
在例外时,容器是:
解析WindowsUniversal.ViewModels.Interfaces.IBoardViewModel,(无)
当禁用.NET Native时,所有这些都在Debug或Release下工作。现在我知道.NET Native有它的局限性,反射就是其中之一。我想我在问这个怎么解决这个问题?
非常感谢任何见解,谢谢。