5

IIS 7.5 で autofac 3.0 を使用する新しい MVC 4 Web アプリケーション。IHttpModule に依存関係を挿入するにはどうすればよいですか?

コンストラクターインジェクションを試したところ、次の結果になりました。

タイプ 'AnonymousIdentityModule' のコンストラクターが見つかりません

そのため、内部には http モジュールのパラメーターなしのコンストラクターが必要なようです。プロパティの注入も試しましたが、依存関係が実際に注入されることはありませんでした。

登録

builder.RegisterType<AnonymousIdentityModule>().As<IHttpModule>().PropertiesAutowired().InstancePerHttpRequest();

IHttpModule コード

public class AnonymousIdentityModule : IHttpModule
{
    private readonly IServiceManager _serviceManager;

    // this causes "constructor not found" exception 
    public AnonymousIdentityModule(IServiceManager serviceManager)
    {
        _serviceManager = serviceManager;
    }

    // never assigned by autofac
    public IServiceManager ServiceManager
    {
        get { return _serviceManager; }
        set { _serviceManager = value; }
    }
    ...
}

web.config

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <add name="AnonymousIdentityModule" type="AnonymousIdentityModule" />
    </modules>
  </system.webServer>

Windsor に関連するこの古い記事を見つけましたが、autofac には同等のものはありませんでした。

4

1 に答える 1

7

この SO の質問を確認してください:カスタム HTTP モジュールへの IoC 依存性注入 - どのように? (ASP.NET)

Phil Haack によるこの投稿: http://haacked.com/archive/2011/06/02/dependency-injection-with-asp-net-httpmodules.aspx

どちらも、別の HttpModule を作成して初期化することにより、HttpModule に DI を提供することについて話しています。また、必要に応じて、PH は彼の HttpModuleMagic の nuget パッケージを提供しています。

PM> Install-Package HttpModuleMagic

ただし、HttpModules は一種のシングルトンになったときにのみ作成されるため、依存関係もシングルトン (または単一のインスタンス) である必要があります。

したがって、リクエストごとの依存関係が必要な場合は、次の投稿を確認してください: http://blog.sapiensworks.com/post/2013/03/18/Http-Module-Dependecy-Injection-with-Autofac-Gotcha.aspx

これは、Factory 関数を使用して、必要に応じて適切にスコープされた依存関係を取得する方法を示しています。

于 2013-05-29T00:28:43.557 に答える