2011-06-08 43 views
1

我是Autofac和IoC的新手,所以现在我尝试使用IoC构建我的第一个ASP.NET MVC 3应用程序。Autofac - 在ASP.Net中处理多个请求MVC 3

在此代码中,我尝试手动注册ProductController(在Global.asax中)。

protected void AutofacIocRegistration() 
    { 

    var builder = new ContainerBuilder(); 
    //PRODUCT CONTROLLER 
    var registration = builder.Register(c => new ProductsController(c.Resolve<IProductRepository>())); 
    builder.RegisterType<ProductsController>().InstancePerHttpRequest(); 

    SqlProductsRepository productRepository = new SqlProductsRepository(DATABASE_CONNECTION); 
    builder.RegisterInstance(new ProductsController(productRepository)); 

    IContainer container = builder.Build(); 
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

} 

当我建的第一次应用,我得到的4种产品在HTML页面列表(如我所料),但是当我刷新页面或进入“下一步”的产品的其他名单,然后我得到的错误

控制器 的单个实例“WebUI.Controllers.ProductsController” 不能被用来处理多个 请求。如果自定义控制器 工厂正在使用中,请确保其 为每个请求创建了一个新的 控制器实例。

正如你可以在这个代码

builder.RegisterType<ProductsController>().InstancePerHttpRequest(); 

看到我尝试用InstancePerHttpRequest()方法,但是不成功的解决这个问题,如果你有任何建议,请张贴。

感谢您提前提供任何帮助。

回答

1

使用下面的方法来注册你的控制器

builder.RegisterControllers(Assembly.GetExecutingAssembly()); 

如果您使用构造器注入的控制器,你可以这样

builder.RegisterType<SqlProductsRepository>().As<IProductRepository>(); 

这样它会创建对象图形注册库当它需要创建控制器

+0

谢谢,现在的作品,此外我复制SqlProductsRepository类中的DATABASE_CONNECTION字符串,并删除参数从建设者 – SpaceA 2011-06-08 22:40:35

+0

篦。将答案标记为已接受 – Eranga 2011-06-08 22:50:19