Autofac - обрабатывать несколько запросов в ASP.Net MVC 3 - PullRequest
1 голос
/ 08 июня 2011

Я новичок в Autofac и IoC, поэтому сейчас я пытаюсь создать свое первое приложение ASP.NET MVC 3 с IoC.

Вот с этим кодом я пытаюсь вручную зарегистрировать 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 Ответ

1 голос
/ 08 июня 2011

используйте приведенный ниже метод для регистрации ваших контроллеров

builder.RegisterControllers(Assembly.GetExecutingAssembly());

если вы используете инжектор конструктора в контроллерах, вы можете зарегистрировать свой репозиторий следующим образом

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

таким образом, он создастграф объектов, когда нужно создать контроллер

...