Autofac avec MVC4: le contrôleur n'a pas de constructeur par défaut
J'ai travaillé avec Autofac dans MVC3 et de l'amour. Maintenant, je suis en train de la mettre en œuvre avec MVC4.
J'ai installé les pré-versions de Autofac MVC4 et Autofac WebApi via le Gestionnaire de paquets de la Console (Install-Package Autofac.Mvc4 -Pré et Install-Package Autofac.WebApi -Pré)
J'ai ajusté mon conteneur IoC comme suit:
private static void SetAutofacContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerHttpRequest().InstancePerApiRequest();
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerHttpRequest().InstancePerApiRequest();
builder.RegisterType<RepositoryWrapper>().As<RepositoryWrapper>().InstancePerHttpRequest().InstancePerApiRequest();
builder.RegisterType<ServiceWrapper>().As<ServiceWrapper>().InstancePerHttpRequest().InstancePerApiRequest();
//Repositories
builder.RegisterAssemblyTypes(typeof(UserRepository).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerHttpRequest().InstancePerApiRequest();
//Services
builder.RegisterAssemblyTypes(typeof(UserService).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerHttpRequest().InstancePerApiRequest();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
Quand je lance l'application (par le biais de l'API contrôleur) - je obtenir de l'exception:
"Contrôleurs.UserController " n'a pas de constructeur par défaut"
Le contrôleur ressemble à ceci:
namespace Controllers
{
[Authorize]
public class UserController : ApiController
{
private ServiceWrapper _services;
public UserController(ServiceWrapper services)
{
_services = services;
}
//GET api/user/{userrequest}
public IQueryable<User> Get(UserRequest request)
{
if (ModelState.IsValid)
{
'...
}
}
}
Suis-je raté quelque chose? N'ai-je pas le droit? Toute aide serait grandement appréciée!
Mise à jour
Mon API contrôleur sont dans un projet distinct dans la même solution. Si je place l'API contrôleur principal de mon projet MVC, il fonctionne. Quelqu'un pourrait-il svp m'éclairer sur la façon d'obtenir de l'Autofac pour enregistrer les contrôleurs d'API dans mon projet d'API?
source d'informationauteur Vocte
Vous devez vous connecter pour publier un commentaire.
Avec le
RegisterApiControllers
méthode vous dire Autofac où (dans quel assemblée) il doit chercher votreApiControllers
Donc l'appel suivant:
Registres de la
ApiControllers
à partir de l'assembly en cours (projet).Si vous avez
ApiController
s aussi dans un autre projet que vous avez besoin de l'utiliser comme ceci:Qui signifie: inscrivez-vous tous la
ApiController
formulaire de l'assemblée (projet) où laUserController
vie. Si vous avez seulement besoin d'unRegisterApiControllers
par l'assemblée même si vous disposez de plusieursApiController
dans une assemblée (projet).