LightInject尝试在没有当前范围的情况下创建范围实例

时间:2014-02-04 18:43:44

标签: c# asp.net-mvc asp.net-mvc-4 dependency-injection

我(noob to light inject mvc)我在我的asp.mvc 4应用程序中使用LightInject MVC,除了偶尔的异常外,效果很好。现在我在预生产中看到了它。例外情况是: System.InvalidOperationException:尝试创建没有当前作用域的作用域实例。

我的应用开始代码是:

var container = new LightInject.ServiceContainer();
container.RegisterControllers();
container.RegisterAssembly(typeof(AppDDD.RegisterMe).Assembly, () => new PerScopeLifetime());
... scoped registrations
container.EnableMvc();

我得到了一个堆栈跟踪错误,如:

  

System.InvalidOperationException:尝试时发生错误   创建一个'MvcAPP.Controllers.HomeController'类型的控制器。使   确保控制器具有无参数的公共构造函数。 ---&GT;   System.InvalidOperationException:尝试创建范围实例   没有当前范围。在   LightInject.PerScopeLifetime.GetInstance(Func 1 createInstance, Scope scope) at DynamicMethod(Object[] ) at LightInject.ServiceContainer.<>c__DisplayClass40.<WrapAsFuncDelegate>b__3f() at LightInject.PerRequestLifeTime.GetInstance(Func 1 createInstance,   范围范围)在DynamicMethod(Object [])at   LightInject.ServiceContainer.TryGetInstance(输入serviceType)at   System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(的RequestContext   requestContext,Type controllerType)---内部异常结束   堆栈跟踪--- at   System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(的RequestContext   requestContext,输入controllerType)at   System.Web.Mvc.DefaultControllerFactory.CreateController(的RequestContext   requestContext,String controllerName)at   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase   httpContext,IController&amp;控制器,IControllerFactory&amp;厂)
  在System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase)   httpContext,AsyncCallback回调,对象状态)at   System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)

我创建了几个小型测试ASP MVC项目来隔离异常但没有成功。

控制器是每个实例的范围,每个实例中的所有对象都被指定为PerScopeLifetime。

我可以进行调整,还是应该停止使用PerScopeLifetime?我必须为我的EF上下文设定生命周期。

在我的控制器完成构建之前抛出异常,因此它出现了。

1 个答案:

答案 0 :(得分:2)

我希望您知道问题已经解决,从NuGet获取最新和最好的应该解决您的问题。

祝你好运

Bernhard Richter