3

Google/MyBrain が失敗しています。フレームワークを使用せずに (私は同僚を追い越すことはありません)、あなた (プログラマー) がインスタンスの作成を制御できない場合、HTTPModule に依存関係をどのように注入しますか?

カスタムの web.config セクション + リフレクションをハックするつもりですか、それとも私が見ていないよりクリーンなものがありますか?

たとえば、Karl Seguin のサンプルモジュールをベースとして使用し、ILogger の実装を想定しています。.Net 2.0 fwiw

public class ErrorModule : IHttpModule
{
    private ILogger injectedLogger; //how to set this?

    public void Init(HttpApplication application)
    {
        application.Error += (new EventHandler(this.application_Error));
    }

    public void Dispose() { /* required by IHttpModule */ }

    private void application_Error(object sender, EventArgs e)
    {
        this.injectedLogger.doStuff(e.ExceptionObject as Exception);
    }
}

このようなことで、私がどれだけ MSDN を軽蔑しているかを思い知らされます。

4

3 に答える 3

5

私はプログラムによる解決策に出くわしました。web.config参照を完全に排除し、ライフサイクルに注意すれば、global.asaxにモジュールを追加できます。

global.asaxに次を追加します。

public static ErrorModule myErrorModule;

public override void Init()
{
    base.Init();
    myErrorModule = new ErrorModule(new LogImplementer());
    myErrorModule.Init(this);
}

ここで、「LogImplementer」はILoggerを実装し、httpmoduleにコンストラクターを追加するだけです。

public ErrorModule(ILogger injected)
{
    this.Logger = injected;
}

いくつかの健康上の警告があります。global.asaxでこれを行う場所に本当に注意する必要があり(Init()が正しいことは確かですが、確かではありません)、モジュールは読み取り専用のHttpApplication.Modulesコレクションに追加されません。 。それ以外は、美しく動作します。

于 2009-01-14T14:45:13.073 に答える
0

非常に単純な1クラスのioc IoCコンテナを15分と33行で使用できます

于 2009-01-14T13:58:57.333 に答える
0

同様の質問に関する私の回答をご覧ください:

カスタム HTTP モジュールへの IoC 依存性注入 - どのように? (ASP.NET)

于 2009-11-09T08:46:22.720 に答える