2012-06-02 8 views
14
var resolver = new AutofacWebApiDependencyResolver(container); 
configuration.ServiceResolver.SetResolver(resolver); 

po aktualizacji do ASP.NET MVC4 (RC) pojawia się następujący błąd:Autofac/MVC4/WebAPI (RC) Dependency Injection problem po aktualizacji z wersji beta

'System.Web.Http.HttpConfiguration' does not contain a definition for 'ServiceResolver' and no extension method 'ServiceResolver' accepting a first argument of type 'System.Web.Http.HttpConfiguration' could be found (are you missing a using directive or an assembly reference?)

Zdaję sobie sprawę po przeczytaniu tego (http://www.asp.net/web-api/overview/extensibility/using-twe-web-api-dependency-resolver), że te interfejsy uległy zmianie, ale nie jestem pewien, jak zastosować tę zmianę w sposobie korzystania Autofac.

Czy muszę poczekać na nowe wydanie Autofac lub czy istnieje inny sposób, w jaki mogę go pominąć.

Odpowiedz

5

Edit: James Bradt wspomina w swoim poście poniżej, pakiet Autofac został zaktualizowany, aby rozwiązać ten problem, więc każdy napotykając tego wątku w przyszłości prawdopodobnie powinien wypróbować nowy pakiet pierwszy :)

Zasadniczo, z nowym pakietem po prostu trzeba to zrobić w swoim Global.asax.cs:

GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container); 

/Edycja

Po prostu napotkałem ten sam problem - udało mi się go rozwiązać w mojej sytuacji, tworząc prostą implementację IDependencyResolver, która owija istniejący AutofacDependencyResolver.

Jak sugeruje nazwa klasy, traktuję to jako tymczasowe rozwiązanie - metody BeginScope i Dispose będą wymagać pewnych prac i oczywiście nie będą odpowiednie do środowiska produkcyjnego, ale to pozwoli mi kontynuować rozwój, dopóki nie pojawi się właściwe rozwiązanie .

Więc z tymi zastrzeżeniami, realizacja IDependencyResolver wygląda następująco:

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; 
    } 
} 

i ustawić go tak w Global.asax.cs:

var container = builder.Build(); 
var resolver = new AutofacDependencyResolver(container); 
GlobalConfiguration.Configuration.DependencyResolver = new TemporaryDependencyResolver(resolver); 
+0

@StevenWilcock myślę, że to działa, chyba że mam nowy błąd, że nie jestem pewien, jest związane. na builder.ConfigureWebApi (konfiguracja); Otrzymuję ten błąd: Nie można załadować typu "System.Web.Http.Dispatcher.DefaultHttpControllerFactory" z zespołu "System.Web.Http, wersja = 4.0.0.0. Oto linie przed: var configuration = GlobalConfiguration.Configuration; var builder = new ContainerBuilder(); // Skonfiguruj kontener za pomocą implementacji integracji. builder.ConfigureWebApi (konfiguracja); –

+0

Może muszę również zaktualizować System.Net.Http do RC? nie ... jest tam nowy pakiet System.Web.Http, który muszę zainstalować? –

+1

Prawdopodobnie musisz pobrać pakiet nuget Microsoft.Net.Http.2.0.20505.0, który zawiera zaktualizowany zestaw System.Net.Http - mogą być też inne, których też nie masz, nie jesteś pewien. Nie uaktualniłem mojego projektu MVC4 z Beta do RC - stworzyłem nowy projekt i skopiowałem wszystko, co było mi potrzebne ze starego - w ten sposób nic się nie ominęło, chociaż jest to ciężka praca sama w sobie :) Zakładam, że już zainstalowałeś MVC4 z http : //www.asp.net/mvc/mvc4 tutaj, więc masz szablony projektu itp.? –

4

Pakiet AutoFac.WebApi ma został zaktualizowany do (RC) - wersja 2.6.2.859

Wygląda na to, że został dostosowany do zmiany zależności między RC i Beta

+0

teraz, gdy mam Autofac dla MVC4 pracującego z moim api webowym, zastanawiam się czy są zalety powrotu do korzystania z AutoFac.WebApi –

0

Próbowałem powyższych rozwiązań, ale nie działało dla mnie. Usunięcie i ponowne zainstalowanie tych 2 specyficznych pakietów rozwiązało problem.

Microsoft.AspNet.WebApi.Tracing 
Microsoft.AspNet.WebApi.OData 
Powiązane problemy