Я работаю над небольшим школьным проектом, веб-сайтом ASP.NET C #; мы работаем с веб-приложением, используя файл Global.asax
для централизации логики запросов.
В любом случае, мой коллега и я несем ответственность за кодирование в нашей группе, и мы оба являемся опытными PHP-разработчиками. Нам обоим очень нравится работать с архитектурным стилем, используемым средой PHP Laravel , используя маршруты ( обратные вызовы, связанные с ) в качестве «контроллеров», и (, несмотря на то, что это квадратный колышек, проблема круглого отверстия ) пытаются воспроизвести эту функциональность для этого проекта.
Это нелегкая задача; Я реализовал интерфейс IRouteHandler
как CallbackRouteHandler
, пытаясь начать реплицировать эту функциональность:
public class CallbackRouteHandler : IRouteHandler
{
public Func<RequestContext, IHttpHandler> Callback { get; protected set; }
public CallbackRouteHandler(Func<RequestContext, IHttpHandler> callback)
{
this.Callback = callback;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this.Callback(requestContext);
}
}
К сожалению, это примерно столько, сколько я получил. Я читаю обзор жизненного цикла страницы ASP.NET , пытаясь лучше понять весь процесс.
То, что мы застряли на , это программная загрузка файлов ASPX (точнее, , создание экземпляров в виде Page
объектов ) в рамках заданного обратного вызова маршрута. Мы надеялись, что в рамках обратного вызова будет достаточно простой способ выполнить что-то вроде:
// instantiate the target ASPX page object
OurSite.SomeNamespace.SomePage page = new OurSite.SomeNamespace.SomePage();
// manipulate the page object, setting public properties, etc.
page.SomeControl.Text = "Foobar!";
// eventually "render" the file to somehow; at this point, the
// page and it's associated code-behind events take control
page.Render();
У меня проблемы с пониманием обоих: 1) Как это сделать? 2) Когда ( относительно вышеупомянутого жизненного цикла страницы ) сделать это.
Как (, если вообще ) можно реализовать такую функциональность? Я вижу, что этот процесс, скрытый от ASP.NET, кажется очень сложным, но наверняка другие уже шли по этому пути раньше.