Как обработать событие запуска приложения в модуле ASP.NET - PullRequest
3 голосов
/ 25 июня 2010

Я пишу модуль HTTP asp.net, который должен прочитать данные конфигурации один раз из локального файла (скажем, config.xml, хранящегося в корневом каталоге приложения), а затем на основе конфигурации выполнить некоторую обработку входящих Запросы.

Поскольку в модулях Asp.NET нет доступных перехватов Application_Start / Application_init, что было бы лучшим способом справиться со сценарием. Я пытаюсь избежать чтения файла конфигурации каждый раз, когда приходит запрос. В идеале я хочу прочитать файл конфигурации при запуске приложения.

Мне нужно кодировать это только в модуле http, и я не хочу использовать Global.asax

Ответы [ 5 ]

1 голос
/ 01 июля 2010

Я бы выбрал простое свойство, что-то вроде этого ...

public MyConfig Config
{
    get
    {
        MyConfig _config = Application["MyConfig"] as MyConfig;
        if (_config == null)
        {
            _config = new MyConfig(...);
            Application["MyConfig"] = _config;
        }
        return _config;
    }
}

таким образом вы просто получаете доступ ко всему, что вам нужно из Config через свойство ...

int someValue = Config.SomeValue;

и он загружается в объект приложения, если он еще не был

Если вам нужна конфигурация для каждого пользователя, а не глобально, просто используйте Session["MyConfig"] вместо Application["MyConfig"]

0 голосов
/ 26 июня 2010

статическая переменная сделала свое дело. вот код, если кому-то интересно -

static string test; 
        public void Init(HttpApplication application)
        {


            application.BeginRequest +=(new EventHandler(this.Application_BeginRequest));
            test = "hi"; 
            application.EndRequest +=(new EventHandler(this.Application_EndRequest));


        }
       private void Application_BeginRequest(Object source,EventArgs e)
        {
            {
                HttpApplication application = (HttpApplication)source ;
                HttpContext context = application.Context;
                context.Response.Write(test);
            }


        }
0 голосов
/ 25 июня 2010

В методе init вашего httpmodule вы можете подключиться к событию в контексте.

Например:

public void Init(HttpApplication context)
    {

        context.PostRequestHandlerExecute += (sender, e) =>
        {
            Page p = context.Context.Handler as Page;
            if (p != null)
            {
            ///Code here    
            }
        };
    }
0 голосов
/ 25 июня 2010
public SomeHttpModule : IHttpModule
{    
    private static readonly Configuration Configuration = 
            ConigurationReader.Read();    
}
0 голосов
/ 25 июня 2010

Не уверен, что это сработает, но вы можете реализовать это в модуле init метод .

...