Autofac/MVC4/WebApi (RC) Зависимость от инъекции после обновления с бета-версии

var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);

после обновления до ASP.NET MVC4 (RC) Я получаю следующую ошибку:

'System.Web.Http.HttpConfiguration' не содержит определения для "ServiceResolver" и не используется метод расширения "ServiceResolver" первым аргументом типа "System.Web.Http.HttpConfiguration" может быть (вам не хватает директивы использования или ссылки на сборку?)

Я понял после прочтения этого (http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver), что эти интерфейсы изменились, но я не уверен как применить это изменение к тому, как я использую Autofac.

Мне нужно дождаться новой версии от Autofac или есть другой способ, которым я могу пройти мимо этого.

Ответы

Ответ 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);

Ответ 2

Пакет AutoFac.WebApi обновлен до версии (RC) - версия 2.6.2.859

Кажется, что оно было скорректировано для изменения зависимостей между RC и Beta​​p >

Ответ 3

Я пробовал решения, но не работал у меня. Удаление и переустановка этих двух конкретных пакетов решила проблему для меня.

Microsoft.AspNet.WebApi.Tracing
Microsoft.AspNet.WebApi.OData