簡體   English   中英

如何將Autofac與WepApi 2和Owin集成?

[英]How to integrate Autofac with WepApi 2 and Owin?

我正在使用此軟件包將Autofac與我的WebApi Owin應用程序集成:

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

並關注這篇文章:

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

我在Startup.cs中的代碼如下所示:

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

無論我如何旋轉它,重新排列代碼或其他任何東西,Autofac都無法解決任何問題。 在Owin之前,我的Global.asax方法運行得很好:

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

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

        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

我錯過了什么?

謝謝

好,

我想到了。 Autofac Owin集成實際上創建了一個Owin liftimescope,它可以通過整個Owin管道獲得,因此可用於中間件並將此lifetimescope擴展到HttpRequestMessage。 這是標有AutofacWebRequest標記的lifetimescope。

因此,所有以前的WebApi集成代碼仍然需要在應用程序啟動時執行。 我包括:

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

但錯過了:

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

在EngineContext.Initialize方法中,該方法通過構建器執行所有注冊。

在這里,您可以找到有關如何將Autofac與WebApi集成的更多信息,這顯然也需要在Owin的情況下完成:

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

我希望這很有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM