2017-10-03 4 views
0

J'essaie d'apprendre à utiliser autofac dans MVC et ne pas avoir beaucoup de chance.Autofac dans MVC 5

J'ai installé Autofac.mvc5 de la version 4.01 Nuget et Autofac V4.6.1

Je le contrôleur suivant:

[Authorize] 
public class NotificationsController : ApiController 
{ 
    private ApplicationDbContext _context; 
    private readonly IMapper _mapper; 

    public NotificationsController(IMapper notificationMapper) 
    { 
     _context = new ApplicationDbContext(); 
     _mapper = notificationMapper; 
    } 

    public IEnumerable<NotificationDto>GetNewNotifications() 
    { 
     var userId = User.Identity.GetUserId(); 

     var notifications = _context.UserNotifications 
          .Where(un => un.UserId==userId) 
          .Select(un=>un.Notification) 
          .Include(n=>n.Gig.Artist).ToList(); 




     return notifications.Select(notification => _mapper.Map<NotificationDto>(notification)).ToList(); 


    } 
} 

Mon Global.asax est:

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     ConfigureAutofac(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 



    } 

    private void ConfigureAutofac() 
    { 
     var autoMapperConfig = new MapperConfiguration(c => 
     { 
      c.AddProfile(new NotificationProfile()); 
     }); 

     var mapper = autoMapperConfig.CreateMapper(); 

     var builder = new ContainerBuilder(); 
     builder.RegisterInstance(mapper); 

     builder.Register(x => new NotificationsController(x.Resolve<IMapper>())); 

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

Qu'est-ce que Je découvre que lorsque j'appelle ceci en utilisant posman, j'obtiens une erreur disant que j'ai besoin d'un consturctor sans paramètre, mais si je mets le constructeur, _mapper est nul.

Quelqu'un pourrait-il me diriger dans la bonne direction s'il vous plaît?

Répondre

1

Votre contrôleur dérive de ApiController, donc vous n'utilisez pas MVC, vous utilisez WebApi (je suppose WebApi2). Donc, vous devez utiliser soit Controller et MVC, soit installer le package Autofac.WebApi2 NuGet pour gérer WebApi2. En outre, au lieu d'enregistrer manuellement tous vos contrôleurs, vous pouvez utiliser RegisterControllers() pour MVC ou RegisterApiControllers() pour WebApi pour que tous vos contrôleurs soient enregistrés en même temps. Surtout, lorsque votre NotificationController n'utilise aucune injection de fantaisie pour exiger plus d'enregistrement personnalisé.

La documentation décrit très bien, comment vous devriez utiliser Autofac avec MVC ou WebApi, vous devriez commencer là.

+0

Merci pour la réponse. Je vais essayer. – kcis8rm