Pracowałem z Autofac w MVC3 i uwielbiam go. Teraz próbuję go zaimplementować z MVC4.Autofac z MVC4: kontroler nie ma domyślnego konstruktora
zainstalowaniu wersji pre-release Autofac MVC4 i Autofac WebAPI przez menedżera pakietów Console (Install-Package Autofac.Mvc4 -Pre i Install-Package Autofac.WebApi -Pre)
ja poprawiłem kontenera IoC w następujący sposób:
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);
}
Kiedy uruchomić aplikację (poprzez dostęp do kontrolera API) otrzymuję wyjątek: „Controllers.UserController” nie ma domyślnego konstruktora”
Kontroler wygląda następująco:
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)
{
'...
}
}
}
Am I czegoś brakuje? Czy nie skonfigurowałem tego poprawnie? Każda pomoc będzie bardzo ceniona!
Aktualizacja
Mój kontroler API są w osobnym projekcie w tym samym roztworze. Jeśli umieściłem kontroler API w moim głównym projekcie MVC, to działa. Czy ktoś mógłby mnie oświecić, jak zmusić Autofac do zarejestrowania kontrolerów API w moim projekcie API?
czy mógłbyś pokazać swoją klasę kontrolera użytkownika? –
Skąd nazwa metody 'SetAutofacContainer'? – nemesv
In Application_Start() w Global.asax – Vocte