C# 如何在每个请求中使用Unity并重新创建ObjectContext

C# 如何在每个请求中使用Unity并重新创建ObjectContext,c#,asp.net-mvc,entity-framework,unity-container,idisposable,C#,Asp.net Mvc,Entity Framework,Unity Container,Idisposable,我对国际奥委会的团结有一些问题 我做了一个简单的网络应用。它由一个表“Post”组成,表中有三个字段:posted、title、Text。我使用通用存储库: public abstract class BaseRepository<T> : IBaseRepository<T> where T : class { protected ObjectContext db = new BlogDbEntities(); /* C

我对国际奥委会的团结有一些问题

我做了一个简单的网络应用。它由一个表“Post”组成,表中有三个字段:posted、title、Text。我使用通用存储库:

    public abstract class BaseRepository<T> : IBaseRepository<T> where T : class
    {
        protected ObjectContext db = new BlogDbEntities();

        /* CRUD */
    }

    public class PostRepository : BaseRepository<Post>, IPostRepository
    {
        public void Search(Expression<Func<Post, object>> predicate) 
        {
          /* some search specific entity logic */   
        }
    }

    public interface IPostRepository : IBaseRepository<Post>
    {
        void Search(Expression<Func<Post, object>> predicate);
    }
在Global.asax中,我使用Unity解决依赖关系:

 var container = new UnityContainer();
            var controllerFactory = new UnityControllerFactory(container);
            ControllerBuilder.Current.SetControllerFactory(controllerFactory);
            container.RegisterType<IPostRepository, PostRepository>(new ContainerControlledLifetimeManager());
var container=newunitycontainer();
var controllerFactory=新的UnityControllerFactory(容器);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
RegisterType(新的ContainerControlledLifetimeManager());
启动应用程序后,当我确实请求时,例如/后/第一个请求正常执行。但当我再次尝试执行请求时,会出现异常“ObjectContext实例已被释放,无法再用于需要连接的操作。”

当我尝试在没有Unity的情况下执行请求时,不会显示IoC框架异常,ObjectContext工作正常

我猜这种行为的原因是Unity,我认为存储在Unity容器中的上下文。谁能帮助我在每次请求后通过重新创建上下文正确配置Unity。

谁能帮助我在每次请求后通过重新创建上下文来正确配置Unity


注册类型时,可以指定要使用,这会导致每个调用创建一个新实例。

我认为从技术上讲,您需要的是每个请求的生命周期管理器,而不是临时的。Transient会在每次有依赖项时为您提供一个新实例,而per请求会为您提供相同的实例,只要您处于相同的HTTP请求中。后者通常是你想要的。PerRequest不是随盒提供的,但是有很多实现。
 var container = new UnityContainer();
            var controllerFactory = new UnityControllerFactory(container);
            ControllerBuilder.Current.SetControllerFactory(controllerFactory);
            container.RegisterType<IPostRepository, PostRepository>(new ContainerControlledLifetimeManager());