Unity:解决TimeSpan时的致命执行引擎错误

时间:2009-12-03 21:16:48

标签: .net struct unity-container fatal-error

我正在尝试使用TimeSpan解析Unity。执行容器在FatalExecutionEngineError中解析调用结果。

  

检测到FatalExecutionEngineError   消息:运行时遇到致命错误。在线程0x1bb8上,错误的地址为0x543c3dc8。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。

在DEBUG中运行测试会导致调试器请求以下文件。

  

X:\统一\ SRC \ ObjectBuilder的\策略\的buildPlan \ DynamicMethod的\ DynamicMethodBuildPlan.cs

它在第38行显示以下ExecutionEngineException

  

System.ExecutionEngineException未处理     Message =“抛出类型'System.ExecutionEngineException'的异常。”     的InnerException:

测试

[TestClass]
public class Example
{
    private readonly IUnityContainer container = new UnityContainer();

    [TestInitialize]
    public void TestInitialize()
    {
        container.Register<TimeSpan>(new ExternallyControlledLifetimeManager());
    }

    [TestMethod]
    public void Test()
    {
        var expected = new TimeSpan();
        var actual = container.Resolve<TimeSpan>();
        Assert.AreEqual(expected, actual);
    }
}

2 个答案:

答案 0 :(得分:2)

我不确定你为什么会收到这个错误,但是我尝试用以下代码替换类型配置(在你编辑的配置文件中)。

<instances>
   <add name="MyTimeSpan" type="System.TimeSpan" value="1.02:03:04"  />
</instances>

var duration = container.Resolve<TimeSpan>("MyTimeSpan");

以上应该返回持续时间为1天,2小时,3分钟和4秒的时间跨度。

(我在Unity 4.1中试过这个)

答案 1 :(得分:0)

解析TimeSpan时出现

致命执行引擎错误

我发布了this issue on the Unity CodePlex site。已经回答了。

  

在当前位中,您将获得正确的“InvalidOperationException”。 TimeSpan有多个构造函数,默认情况下它会选择四个参数,然后不知道要提供哪些内联。结构实际上没有零参数构造函数,clr“欺骗”引擎盖。

解决方法是告诉Unity使用哪个构造函数。

container.Register<TimeSpan>(new ExternallyControlledLifetimeManager(), 
    new InjectionConstructor(0L));