2012-02-28 40 views
0

我已經得到了同樣的問題,如在this questionAutofac + MVC3 + Html.Action

的錯誤信息是: 控制器「Search.Web.Controllers.AdvancedController」的單個實例不能用來處理多個請求。如果自定義控制器工廠正在使用中,請確保它爲每個請求創建控制器的新實例。

代碼在Global.asax中:

protected void Application_Start() 
{ 
    var containerBuilder = new ContainerBuilder(); 

    containerBuilder.RegisterType<AdvancedController>().InstancePerHttpRequest(); 
    containerBuilder.RegisterType<MemoryBodyTypeRepository>().As<IBodyTypeRepository>; 
    containerBuilder.RegisterType<BodyTypePictureClassFinder>().As<IBodyTypePictureClassFinder>(); 

    var container = containerBuilder.Build(); 

    DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 

這是AdvancedController一些代碼:

private readonly IBodyTypeRepository _bodyTypeRepository; 
private readonly IBodyTypePictureClassFinder _bodyTypePictureClassFinder; 

public AdvancedController(IBodyTypeRepository bodyTypeRepository, IBodyTypePictureClassFinder bodyTypePictureClassFinder) 
{ 
    _bodyTypeRepository = bodyTypeRepository; 
    _bodyTypePictureClassFinder = bodyTypePictureClassFinder; 
} 

[HttpGet] 
public ActionResult Index() 
{ 
    var advancedSearchViewModel = new AdvancedSearchViewModel();   

    return View(advancedSearchViewModel); 
} 

public ActionResult BodyTypes() 
{ 
    // this uses the repositories to create the ViewModel 

    return View(bodyTypesViewModel); 
} 

和索引視圖:

<div> 
    @Html.Action("BodyTypes","Advanced") 
</div> 

如果我執行此我查看得到上面的消息。我也嘗試刪除InstancePerHttpRequest或使用RegisterControllers,而不是明確地重新安裝它們,但那也不起作用。 如果我使用RegisterControllers,我會得到相同的錯誤。如果我刪除InstancePerHttpRequest它以某種方式執行整個景觀的兩倍,這也不是我想要做什麼;)

我希望有人能幫助。這對我來說是一個真正的Showstopper。

Thansk很多!!!!

問候, 弗洛裏安Fanderl

回答

0

我知道這已經發布很久以前。 我有同樣的問題,我可以用你的問題解決我的問題。 希望這對於正在使用的人有用。

var builder = new ContainerBuilder(); 

      builder.RegisterType<ExtensibleActionInvoker>().As<IActionInvoker>().InstancePerHttpRequest(); 
      builder.RegisterControllers(Assembly.GetExecutingAssembly()).InjectActionInvoker().InstancePerHttpRequest(); 
      builder.RegisterType<ConfigService>().As<IConfigService>().InstancePerLifetimeScope(); 
      builder.RegisterType<EntryService>().As<IEntryService>().InstancePerLifetimeScope(); 
      builder.RegisterType<UserService>().As<IUserService>().InstancePerLifetimeScope(); 
      builder.RegisterType<MessageService>().As<IMessageService>().InstancePerLifetimeScope(); 
      builder.RegisterType<CloudService>().As<ICloudService>().InstancePerLifetimeScope(); 
      builder.RegisterType<Services>().As<IServices>().InstancePerLifetimeScope(); 

      builder.RegisterType<AccountController>().InstancePerDependency(); 


      _containerProvider = new ContainerProvider(builder.Build()); 

      ControllerBuilder.Current.SetControllerFactory(new AutofacControllerFactory(ContainerProvider)); 

      AreaRegistration.RegisterAllAreas(); 
      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(System.Web.Optimization.BundleTable.Bundles); 
      AuthConfig.RegisterAuth(); 

      HtmlHelper.ClientValidationEnabled = true; 
      HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

      // Quartz.NET scheduler 
      ISchedulerFactory factory = new StdSchedulerFactory(); 
      var scheduler = factory.GetScheduler(); 
      scheduler.JobFactory = new AutofacJobFactory(ContainerProvider); 
      scheduler.Start(); 
     } 

,如果你發現這是我someController

builder.RegisterType<AccountController>().InstancePerDependency();