2015-10-03 3 views
0

У меня возникли проблемы с разрешением Autofac. Я не могу использовать это с mvc 6 beta7.DI autofac & mvc 6 beta7

Использование зависимостей:

"Autofac": "4.0.0-beta7-130", 
    "Microsoft.AspNet.Mvc": "6.0.0-beta7", 

Мои Startup.cs

public IContainer Container { get; set; } 
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 

     // Create the autofac container 
     var builder = new ContainerBuilder(); 
     // Create the container and use the default application services as a fallback 
     //AutofacRegistration.Populate(builder, services); 

     // Add any Autofac modules or registrations. 
     builder.RegisterModule(new AutofacModule()); 

     Container = builder.Build(); 

    } 

    public void Configure(IApplicationBuilder app) 
    { 
     //app.Run(async (context) => 
     //{ 
     // await context.Response.WriteAsync("Hello World!"); 
     //}); 
     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 

      // Uncomment the following line to add a route for porting Web API 2 controllers. 
      // routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}"); 
     }); 

     app.ApplicationServices = Container.Resolve<IServiceProvider>(); 
    } 

Возьмите это исключение

исключение типа 'Autofac.Core.Registration.ComponentNotRegisteredException' произошло в Autofac .dll, но не обрабатывался в коде пользователя

Дополнительная информация: Запрошенная служба 'System.IServiceProvider' не была зарегистрирована. Чтобы избежать этого исключения, зарегистрируйте компонент для предоставления услуги, проверьте регистрацию службы с помощью IsRegistered() или используйте метод ResolveOptional() для разрешения дополнительной зависимости.

Как использовать autofac с MVC 6 beta 7?

+0

Вы прочитали [документацию] (http://docs.autofac.org/docs/autofac/en/latest/integration/mvc.html)? Сначала вам необходимо зарегистрировать службы. –

+0

Возможный дубликат [Получение автозапуска для работы с mvc6 beta5] (http://stackoverflow.com/questions/30551700/getting-autofac-to-work-with-mvc6-beta5) – MichaC

ответ

0

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

builder.RegisterType<ServiceProvider>().As<IServiceProvider>(); 

Другие услуги могут быть подключены на основе Concrete -> Interface. Вы также можете следовать соглашениям, чтобы установить более автоматическую проводку, если у вас будут классы аналогичных интерфейсов, которые должны реализовать свои конкретные классы с помощью инверсии управления. Вы можете узнать подробнее о регистрации here.

+1

Где находится ServiceProvider? – airat

0

Чтобы активировать функцию autofac, вы можете заменить метод ConfigureServices следующим образом.

public IServiceProvider ConfigureServices(IServiceCollection services) 
{ 
    // Add MVC services to the services container. 
    services.AddMvc(); 

    // Create the autofac container 
    var builder = new ContainerBuilder(); 
    // Create the container and use the default application services as a fallback 
    //AutofacRegistration.Populate(builder, services); 

    // Populate the services. 
    builder.Populate(services); 

    // Add any Autofac modules or registrations. 
    builder.RegisterModule(new AutofacModule()); 

    Container = builder.Build(); 

    // Resolve and return the service provider. 
    return Container.Resolve<IServiceProvider>(); 
}