2012-02-28 8 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を使用しようとしましたが、それも機能しませんでした。 RegisterControllerを使用すると、同じエラーが発生します。 InstancePerHttpRequestを削除すると何とかビュー全体が2回実行されますが、これもやりたいことではありません)

私は誰でも助けてくれることを願っています。これは私にとって本当の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();