2012-02-28 4 views
0

나는 this questionAutofac + MVC3 + Html.Action

에 오류 메시지가 같은 문제가 생겼어요 : 컨트롤러 'Search.Web.Controllers.AdvancedController'의 단일 인스턴스를 처리하는 데 사용할 수 없습니다 여러 요청. 사용자 정의 컨트롤러 팩토리가 사용 중이면 각 요청에 대해 컨트롤러의 새 인스턴스를 생성해야합니다. 나는이보기 I을 실행하면

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

: Global.asax에있는

코드 :

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

그리고 색인보기 :

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에서 일부 코드입니다 위에서 언급 한 메시지를 받으십시오. InstancePerHttpRequest를 제거하거나 명시 적으로 regstering하는 대신 RegisterControllers를 사용하려고 시도했지만 작동하지 않았습니다. RegisterController를 사용하는 경우에도 동일한 오류가 발생합니다. InstancePerHttpRequest를 제거하면 어떻게 든 전체보기가 두 번 실행됩니다. 이는 내가하고 싶은 것이 아닙니다;)

아무도 도와 줄 수 있기를 바랍니다. 이것은 나를위한 진정한 Showstopper입니다.

Thansk a lot !!!!

감사합니다, 플로리안 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();