2012-02-28 2 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> 

Если я выполняю этот вид I получите сообщение, указанное выше. Я также попытался удалить экземпляр InstancePerHttpRequest или использовать RegisterControllers вместо того, чтобы повторно их перезагружать, но это тоже не сработало. Если я использую RegisterControllers, то получаю ту же ошибку. Если я удалю экземпляр InstancePerHttpRequest, он каким-то образом выполнит весь просмотр два раза, что тоже не то, что я хотел бы сделать;)

Надеюсь, кто-нибудь может помочь. Это настоящий демонстратор для меня.

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();