web-dev-qa-db-fra.com

Comment intégrer Autofac avec Web Api 2 et Owin?

J'utilise ce package pour intégrer Autofac à mon application WebApi Owin:

https://www.nuget.org/packages/Autofac.WebApi2.Owin

Et suite à ce post:

http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/

Mon code dans Startup.cs ressemble à ceci:

        var config = new HttpConfiguration();

        IContainer container = EngineContext.InitializeEngine();

        var dependencyResolver = new AutofacWebApiDependencyResolver(container);
        config.DependencyResolver = dependencyResolver;

        app.UseAutofacMiddleware(container);
        app.UseAutofacWebApi(config);

        WebApiConfig.Register(config);
        app.UseWebApi(config);

Cependant, quelle que soit la façon dont je le fais tourner, réorganise le code ou autre, Autofac n'est tout simplement pas en mesure de résoudre quoi que ce soit. Avant Owin, ma méthode Global.asax fonctionnait très bien:

    protected void Application_Start()
    {
        IContainer container = EngineContext.InitializeEngine();

        var dependencyResolver = new AutofacWebApiDependencyResolver(container);
        GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver;

        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

Qu'est-ce que je rate?

Merci

23
Milen Kovachev

D'accord,

Je l'ai compris. L'intégration Autofac Owin crée en fait un liftimescope Owin, qui est disponible sur l'ensemble du pipeline Owin, donc disponible pour le middleware et étend cette durée de vie au HttpRequestMessage. Il s'agit de la durée de vie marquée par la balise AutofacWebRequest.

Ainsi, tout le code d'intégration WebApi précédent doit encore être effectué au démarrage de l'application. J'ai inclus:

    var dependencyResolver = new AutofacWebApiDependencyResolver(container);
    config.DependencyResolver = dependencyResolver;

mais raté:

var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();

dans la méthode EngineContext.Initialize, qui effectue toutes les inscriptions via le générateur.

Ici vous pouvez trouver plus d'informations sur la façon d'intégrer Autofac avec WebApi, ce qui doit évidemment être fait également dans le cas d'Owin:

https://code.google.com/p/autofac/wiki/WebApiIntegration

J'espère que c'est utile!

24
Milen Kovachev