Asp.net mvc 4 Unity.MVC4不';t Dispose()

Asp.net mvc 4 Unity.MVC4不';t Dispose(),asp.net-mvc-4,unity-container,Asp.net Mvc 4,Unity Container,我已经安装了NuGet Unity.MVC4包,并将其与使用Unity.MVC3包时的连接方式相同 我的依赖关系得到了正确的解析,但是当使用HierarchyCallifeTimeManager时,我的对象的Dispose()方法不会在请求结束时调用 实际上,我已经使用Unity.MVC3和Unity.MVC4建立了一个简单的项目,在这两个项目中使用完全相同的Bootstrapper.cs代码。在MVC3版本上,调用Dispose();在MVC4版本上,它不是 我正在像这样注册我的类型

我已经安装了NuGet Unity.MVC4包,并将其与使用Unity.MVC3包时的连接方式相同

我的依赖关系得到了正确的解析,但是当使用HierarchyCallifeTimeManager时,我的对象的Dispose()方法不会在请求结束时调用

实际上,我已经使用Unity.MVC3和Unity.MVC4建立了一个简单的项目,在这两个项目中使用完全相同的Bootstrapper.cs代码。在MVC3版本上,调用Dispose();在MVC4版本上,它不是

我正在像这样注册我的类型

            container.RegisterType<ITest, Test>(new HierarchicalLifetimeManager());
我不认为我做得不对,但是Unity.MVC4包中似乎有一些bug


如果有人成功地使用了这个软件包,我很好奇你是如何让它工作的。

我已经看过了代码。我们只是从codeplex()移植了Unity.MVC3代码,并将其重新捆绑到MVC4中。 我们没有对代码进行任何修改

Unity.MVC4使用由Microsoft()管理的Unity软件包。法典的大部分是统一的


您运行的是不同的.Net版本吗?i、 E4.0对4.5?DotNet 4.5似乎有一个预发行版Unity。

解决此问题的最佳方法是升级并安装该软件包。Bootstrapper软件包包括
PerRequestLifetimeManager
,它应该用来代替
HierarchyCallifeTimeManager
。集成完成后,将在每个HTTP请求结束时按预期调用
Dispose()

请注意,建议除非绝对必要,否则根本不应使用
PerRequestLifetimeManager
。(但是,我认为在某些情况下仍然需要它——例如,您希望在单个请求期间跨所有使用的对象共享
DbContext
。)


使用此解决方案,Unity.MVC4不再需要,可以卸载。

将进行调查,看看发生了什么。我使用的是.NET 4.5,但不确定这会有什么不同。我改为使用Unity.MVC3包(仅限于dll引用),现在它工作正常,所以我将继续使用它。对我来说也是如此。Unity.MVC3工作正常,而Unity.MVC4不调用Dispose。调用
PreApplicationStartCode.PreStart
似乎有问题。从我自己的
PreApplicationStartMethod
中调用该方法可以解决此问题。在Unity.MVC4中缺少程序集信息行[assembly:PreApplicationStartMethod(typeof(Unity.Mvc3.PreApplicationStartCode),“PreStart”)]时发现一个问题,导致无法处理项。“我们正在考虑尽快上传修复程序。”安东:很高兴听到这个消息。BradVin发布一个修复程序来处理PRESTAT代码。谢谢你指出这一点!很高兴你被分类了。似乎不再需要我们的Unity.MVC4包了。@Oliver,这两个包的方法不同。Unity.MVC4使用子容器和内置的
层次结构CallifetimeManager
,我认为它更清晰。鉴于“Unity Bootstrapper for ASP.NET”使用自定义PerRequestLifetimeManager。我将再次研究它,也许两者都存在。我正在使用PerRequestLifetimeManager在Unity中注册我的上下文:container.RegisterType(new PerRequestLifetimeManager(),new InjectionConstructor());-但是DbContext永远不会按请求处理。我还在RegisterTypes方法中包括了这一行:DynamicModuleUtility.RegisterModule(typeof(unityperequesthttpmodule));但是当我这样做时,DbContext将在请求结束之前被释放。有什么想法吗?
    public interface ITest
{
    void Foo();
}

public class Test : IDisposable, ITest
{
    public Test()
    {

    }

    public void Foo()
    {

    }

    public void Dispose()
    {

    }
}