Я работаю с Autofac в MVC3 и люблю его. Теперь я пытаюсь реализовать его с помощью MVC4.
Я установил предварительные версии Autofac MVC4 и Autofac WebApi через консоль диспетчера пакетов (Install-Package Autofac.Mvc4 -Pre и Install-Package Autofac.WebApi -Pre)
Я скорректировал контейнер IoC следующим образом:
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);
}
Когда я запускаю приложение (путем доступа к контроллеру API), я получаю исключение: " Controllers.UserController 'не имеет конструктора по умолчанию"
Контроллер выглядит следующим образом:
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)
{
'...
}
}
}
Я что-то упустил? Разве я не настроил это правильно? Любая помощь будет принята с благодарностью!
Обновление
Мой контроллер API находится в рамках отдельного проекта в том же решении. Если я положу контроллер API в свой основной проект MVC, он будет работать. Может ли кто-нибудь рассказать мне, как заставить Autofac регистрировать контроллеры API в моем проекте API?