Зависимость, вводящая HTTPModule - PullRequest
3 голосов
/ 14 января 2009

Google / MyBrain подводят меня. Без использования инфраструктуры (которую я никогда не узнаю от моих коллег), как вы вводите зависимость в HTTPModule, если вы (программист) не контролируете создание экземпляра?

Нам нравится взламывать пользовательские разделы web.config + отражение или есть что-то более чистое, чего я не вижу?

например. используя в качестве основы модуль example Карла Сегуина и предполагая реализацию 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.

Ответы [ 3 ]

5 голосов
/ 14 января 2009

Я наткнулся на программное решение. Полностью исключив ссылки на 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 и просто добавляет конструктор в модуль http:

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

Есть несколько предупреждений о вреде для здоровья. Вы должны быть очень осторожны с тем, где вы делаете это в global.asax (я почти уверен, что Init () прав, но я не уверен), и модуль не добавляется в коллекцию HttpApplication.Modules только для чтения. , Кроме того, прекрасно работает.

0 голосов
/ 09 ноября 2009

Пожалуйста, посмотрите на мой ответ здесь на похожий вопрос:

Внедрение зависимости IoC в пользовательский модуль HTTP - как? (ASP.NET)

0 голосов
/ 14 января 2009

Вы можете использовать очень простой одноклассный ioc Контейнер IoC за 15 минут и 33 строки

...