Comment intégrer Autofac avec WepApi 2 et Owin?

j'utilise ce paquet pour intégrer Autofac avec mon application WebAPI Owin:

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

et après ce billet:

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

mon code au démarrage.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 lance, réarrange le code ou quoi que ce soit, Autofac n'est tout simplement pas capable de résoudre quoi que ce soit. Avant Owin, j'avais mon Global.la méthode asax fonctionne 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

22
demandé sur Milen Kovachev 2014-06-25 12:22:27

1 réponses

Ok,

j'ai compris. L'intégration D'Owin d'Autofac crée en fait un liftimescope D'Owin, qui est disponible à travers L'ensemble du pipeline Owin, donc disponible pour middleware et étend ce liftimescope au message Httprequestm. C'est le lifetimescope marqué avec L'étiquette AutofacWebRequest.

donc tout le code D'intégration WebApi précédent doit encore être exécuté au démarrage de l'application. J'ai inclus:

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

, mais a manqué:

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

en texte intégral.Initialiser la méthode, qui fait toutes les inscriptions via le constructeur.

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

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

j'espère que c'est utile!

22
répondu Milen Kovachev 2014-06-25 10:57:53