Ответ 1
Edit: Как упоминает Джеймс Брэдт в своем посте ниже, пакет Autofac теперь обновлен, чтобы исправить эту проблему, поэтому каждый, кто попадает в этот поток в будущем, должен сначала попробовать новый пакет:)
В принципе, с новым пакетом вам просто нужно сделать это в файле global.asax.cs:
GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container);
/Edit
Я столкнулся с одной и той же проблемой - я смог ее решить в своей ситуации, создав простую реализацию IDependencyResolver, которая обертывает существующий AutofacDependencyResolver.
Как видно из названия класса, я рассматриваю это как временное разрешение - методы BeginScope и Dispose нуждаются в некоторой работе и явно не подходят для производственной среды, но это позволяет мне продолжать разработку до тех пор, пока не появится правильное решение.
Итак, с этими оговорками реализация IDependencyResolver выглядит так:
public class TemporaryDependencyResolver : IDependencyResolver
{
private readonly AutofacDependencyResolver _autofacDependencyResolver;
public TemporaryDependencyResolver(AutofacDependencyResolver autofacDependencyResolver)
{
_autofacDependencyResolver = autofacDependencyResolver;
}
public void Dispose()
{
}
public object GetService(Type serviceType)
{
return _autofacDependencyResolver.GetService(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _autofacDependencyResolver.GetServices(serviceType);
}
public IDependencyScope BeginScope()
{
return this;
}
}
и я установил его так: Global.asax.cs:
var container = builder.Build();
var resolver = new AutofacDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new TemporaryDependencyResolver(resolver);