The inner exception stack traces are not getting displayed in Unity errors, as a result only the last stack trace is being displayed - sending newbies (like me) down a rabbit trail. I was refactoring an application which relied on a factory and numerous concrete classes which had been retrofitted for Unity. I had intrepeted the error to be a configuration error, later I learned (after much debugging) that it was actually a null object references dangling during the conversion. The following is the error message I received:
Resolution of the dependency failed, type = "Form1", name = "". Exception message is: The current build operation (build key Build Key[TestHarness.Form1, null]) failed: The value for the property "Presenter" could not be resolved. (Strategy type Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy, index 2)
After updating the ResolutionFailedException.cs CreateMessage() as follows:
private static string CreateMessage(Type typeRequested, string nameRequested, Exception innerException)
{
return string.Format(
CultureInfo.CurrentCulture,
Resources.ResolutionFailed,
typeRequested.Name,
nameRequested,
GetInnerExceptionMessage(innerException));
}
/// <summary>
/// Recursive routine to collect all inner exception errors
/// </summary>
/// <param name="ex"></param>
/// <returns></returns>
private static string GetInnerExceptionMessage(Exception ex)
{
StringBuilder errorMessage = new StringBuilder(ex.InnerException.Message);
errorMessage.Append(ex.InnerException.StackTrace);
errorMessage.Append("\r\n");
if (ex.InnerException.InnerException != null)
errorMessage.Append(GetInnerExceptionMessage(ex.InnerException.InnerException));
return errorMessage.ToString();
}
I received the following error message which allows me to isolate issues more quickly:
Resolution of the dependency failed, type = "Form1", name = "". Exception message is: The value for the property "Presenter" could not be resolved. at Microsoft.Practices.ObjectBuilder2.DynamicMethodPropertySetterStrategy.ThrowOnFailedPropertyValueResolution(Exception inner, String propertyName) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\Property\DynamicMethodPropertySetterStrategy.cs:line 82
at BuildUp_TestHarness.Form1(IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\DynamicMethodBuildPlan.cs:line 37
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\BuildPlanStrategy.cs:line 40
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\StrategyChain.cs:line 92
The value for the property "ImageViewer" could not be resolved. at Microsoft.Practices.ObjectBuilder2.DynamicMethodPropertySetterStrategy.ThrowOnFailedPropertyValueResolution(Exception inner, String propertyName) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\Property\DynamicMethodPropertySetterStrategy.cs:line 82
at BuildUp_TestHarness.TestHarnessPresenter(IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\DynamicMethodBuildPlan.cs:line 37
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\BuildPlanStrategy.cs:line 40
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\StrategyChain.cs:line 92
** THE REAL PROBLEM FOLLOWS **
Object reference not set to an instance of an object. at TestHarness.TestHarnessPresenter._imageProcessorService_OnWriteMessage(Object sender, LoggerEventArgs e) in C:\UEApp\ImageProcessor\TestHarness\TestHarnessPresenter.cs:line 148
at ImageProcessor.Library.ImageProcessorService._logger_OnWriteMessage(Object sender, LoggerEventArgs e) in C:\UEApp\ImageProcessor\ImageProcessor.Library\ImageProcessorService.cs:line 59
at ImageProcessor.Library.TraceLogger.Write(String message, TraceLevel level) in C:\UEApp\ImageProcessor\ImageProcessor.Library\TraceLogger.cs:line 93
at ImageProcessor.Library.TraceLogger.WriteVerbose(String message) in C:\UEApp\ImageProcessor\ImageProcessor.Library\TraceLogger.cs:line 129
at LTLibrary.LTRasterImageViewer.LTRasterImageViewer.SetPercentage() in C:\UEApp\ImageProcessor\LTLibrary\LTRasterImageViewer\LTRasterImageViewer.cs:line 457
at LTLibrary.LTRasterImageViewer.LTRasterImageViewer..ctor(ILogger logger) in C:\UEApp\ImageProcessor\LTLibrary\LTRasterImageViewer\LTRasterImageViewer.cs:line 59
at BuildUp_LTLibrary.LTRasterImageViewer.LTRasterImageViewer(IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\DynamicMethodBuildPlan.cs:line 37
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\BuildPlan\BuildPlanStrategy.cs:line 40
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) in C:\VisualStudio2008\Unity\Src\ObjectBuilder\Strategies\StrategyChain.cs:line 92
Tags:
unity
Categories:
Unity