Unity - 如何在解析/实例化对象时收到通知?

时间:2012-05-14 20:45:29

标签: c# .net unity-container

我目前正在调查使用Unity进行大型应用程序设置时的一些性能问题。我怀疑我们分配的对象太多了。由于Unity处理对象创建/分配,因此当Unity解析或创建对象时,是否存在可以记录的事件或事物?我想要一个完整的痕迹,以便我更好地了解正在发生的事情。

谢谢!

4 个答案:

答案 0 :(得分:3)

我不会去定制LifetimeManager。如果您想知道Unity何时创建新对象,您应该直接从Unity的构建管道获取该信息。

TecX project on codeplex中有一个扩展名,它在容器创建对象之前和之后引发事件。查看 TecX.Unity 项目(文件夹通知)中的来源。 TecX.Unity.Tests 中的测试显示了如何使用它。

答案 1 :(得分:2)

尝试以自定义终身经理的方式进行搜索。您可以包装默认的生命周期管理器和对象实例化的日志时间。 也许这个链接可以帮助您:http://tavaresstudios.com/Blog/post/Writing-Custom-Lifetime-Managers.aspx

答案 2 :(得分:2)

您可以通过UnityContainerExtension跟踪依赖项解析。构建一个在TypeMapping阶段添加单个构建器策略:

    protected override void Initialize()
    {
        Context.Strategies.Add(_builderStrategy, UnityBuildStage.TypeMapping);
    }

PreBuildUp的{​​{1}}方法中,您可以看到即将解决的内容,在BuilderStrategy方法中,您可以看到已解决的内容。

答案 3 :(得分:0)

快速而肮脏的解决方案是在您认为多次创建的对象的默认构造函数中添加一些日志记录代码并转储堆栈跟踪。您还可以在此代码中设置断点并在调试期间检查堆栈。