web-dev-qa-db-ja.com

AutofacをWeb Api 2および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);
    }

何が欠けていますか?

ありがとう

23
Milen Kovachev

OK、

私はそれを考え出した。 Autofac Owin統合は、実際にはOwinリフトパイプスコープを作成します。これは、Owinパイプライン全体で使用できるため、ミドルウェアで使用でき、このライフタイムスコープを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

これがお役に立てば幸いです。

24
Milen Kovachev