Привет, Хабр! Я заметил, что такой замечательный MVC-фреймворк для .
NET, как Monorail, здесь как-то несправедливо проигнорировали.
Поэтому, собственно, я и постараюсь восполнить этот пробел.
Сначала имеет смысл коснуться азов: создания шаблона проекта и простого примера, чтобы увидеть, как все это работает. Итак, начнем! Просто хочу предупредить, что это моя первая статья и поэтому некоторые огрехи вполне допустимы.
Буду рад выслушать конструктивную критику.
Вы можете скачать бинарные файлы здесь: sourceforge.net/projects/castleproject/files/MonoRail/2.0/Castle.MonoRail-2.0.0.zip/download Естественно, вам не понадобятся все dll, которые есть в архиве; мы возьмем только самое необходимое.
Создание проекта.
Создать первоначальный проект, готовый непосредственно к написанию кода, можно двумя способами: с помощью шаблона для VS и своими ручками.
Первый способ, насколько мне известно, потерял свою актуальность после того, как проект Castle перестал распространяться в виде отдельного MSI-файла.
Теперь вы можете использовать шаблон, но ссылки на сборки все равно придется прерывать на путях к ним.
На всякий случай вот ссылка на готовый шаблон тестового проекта для VS2008: tech.wowkhmer.com/wp-content/uploads/2008/11/CastleMonoRailProject.zip .
Правда, я не могу гарантировать, что он полностью рабочий, так как сам не использую шаблоны для Монорельса.
Учитывая все вышесказанное, давайте подробнее рассмотрим создание проекта вторым способом.
Шаг 1. Создайте новое приложение ASP.NET.
В этом пустом проекте нам не нужен Default.aspx. Но не спешите удалять его.Для того, чтобы при входе в строку браузера www.mysite.com мы были успешно перенаправлены на нашу домашнюю страницу mysite.com/home/index.rails, этот файл нам все равно понадобится.
Мы удалим файлы Designer и .
cs, а сам default.aspx перенесем примерно так:
<%@ Page Language="C#" %>
<script runat="server">
protected override void OnLoad(EventArgs e)
{
Response.Redirect("~/home/index.rails");
base.OnLoad(e);
}
</script>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head>
<title>Welcome</title>
</head>
<body>
<p>
If you were not redirected, please <a href="home/index.rails">click here</a>.
</p>
</body>
</html>
Здесь home/index.rails — это реальный путь к главной странице сайта.
Естественно, разрешение рельсов можно изменить, но в примерах я буду использовать именно это.
Шаг 2. Настройка
Добавим следующие сборки из тех, что мы скачали:- Замок.
Ядро
- Замок.
Монорельс.
Каркас
- Замок.
Монорельс.
Framework.Views.NVelocity
Я работал с Brail и NVelocity, но второй мне понравился больше, к тому же Brail на тот момент еще имел довольно слабую поддержку и многие вещи не были реализованы.
Не знаю, как обстоят дела сейчас, но буду рад услышать.
Вносим изменения в web.config. В моем проекте получилось примерно так:
<Эxml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="monorail" type="Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler, Castle.MonoRail.Framework" />
</configSections>
<monorail>
<controllers>
<assembly>TestMonorailApp</assembly>
</controllers>
<viewEngines viewPathRoot="Views">
<add type="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine, Castle.MonoRail.Framework.Views.NVelocity" />
</viewEngines>
</monorail>
<system.web>
<compilation debug="true" />
<httpHandlers>
<add verb="*" path="*.
rails" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" /> <add verb="*" path="*.
vm" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
</system.web>
</configuration>
Сначала идет оформление участка монорельсовой дороги.
В нем мы указываем, куда нам нужно загрузить контроллеры для нашего приложения.
Так как мой пример простой, то контроллеры находятся в одной сборке и соответственно указано ее название.
Далее в этом же разделе мы регистрируем наш движок рендеринга и указываем корень дерева каталогов представлений (в нашем случае «Представления»).
И наконец, добавляем обработчик выбранного нами расширения (rails) и запрещаем доступ к файлам vm (это расширение используется для шаблонов NVelocity и у нас нет смысла иметь к ним доступ извне).
Шаг 3. Остаётся только создать структуру папок.
У меня это так, как показано на картинке.
Готово, шаблон проекта создан!
Добавляем простой функционал
Мы создали проект, но что в этом интересного, если пока ничего не работает? Давайте создадим контроллер, который, например, будет отображать список книг.Для этого нам понадобится модель «Книга», которую мы поместим в папку «Модели».
Естественно, в реальных проектах модели будут располагаться в отдельных сборках, но не в нашем простом примере.
Вот реализация класса Book:
public class Book
{
public String Title { get; set; }
public String Author { get; set; }
public static IList<Book> FindAll()
{
return new List<Book>
{
new Book
{
Title = "Алиса в стране чудес",
Author = "Lewis Carroll"
},
new Book
{
Title = "Буратино",
Author = "Carlo Collodi"
},
new Book
{
Title = "Я робот",
Author = "Isaac Asimov"
}
};
}
}
Метод FindAll просто возвращает нам коллекцию из трех книг, которую мы будем использовать в нашем тестовом примере.
Теперь давайте создадим контроллер.
Поскольку мы указали путь по умолчанию в deafult.aspx как home/index.rails, мы разместим на этой странице список наших книг.
Соответственно, в папке Controllers создаем HomeController, который унаследован от SmartDispatcherController, входящего в состав Monorail. Строго говоря, в нашем примере возможно наследование от Controller, поскольку в нашем примере мы не будем использовать привязки, но в реальных проектах функционал SmartDispatcherController очень часто все еще востребован.
Там мы создаем метод Index, который будет вызываться при вводе mysite.com/home/index.rails в браузере.
Реализация класса выглядит следующим образом:
public class HomeController : SmartDispatcherController
{
public void Index()
{
PropertyBag["books"] = Book.FindAll();
}
}
Здесь мы просто загружаем все книги в контейнер, доступный во View. Это вполне соответствует духу модели «тонкий контроллер/толстая», где вся логика находится в модели, а контроллер отвечает только за передачу данных между представлением и моделью.
Остается только создать настоящий html-код. Мы поместим его в папку просмотра и домашнюю подпапку.
Таким образом мы разграничиваем представления в зависимости от контроллера, которому они принадлежат. Там мы создаем файл index.vm, содержащий следующее:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head>
<title>Test Application</title>
</head>
<body>
<h3>List of books:</h3>
#foreach($book in $books)
#each
<li>
$book.Title by $book.Author
</li>
#beforeall
<ul>
#afterall
</ul>
#end
</body>
Здесь мы используем макрос foreach для перебора нашей коллекции книг.
Здесь она доступна как обычная переменная.
То есть все, что мы пишем в PropertyBag в контроллере, становится переменными в представлении.
В противном случае это обычный HTML-файл.
Вот ваш первый простой пример монорельсовой дороги, и все готово.
Теперь нам нужно его запустить.
Если вы добавили этот проект как виртуальный каталог в IIS, то он по умолчанию естественно не может работать с разрешением .
rails. Чтобы научить его этому, просто добавьте стандартный aspnet_isapi.dll в сопоставление разрешений .
rails. Путь к нему можно найти, например, в том же сопоставлении для файлов .
aspx. Главное — не беспокоиться о снятии флажка «Проверить наличие файла» при добавлении сопоставления, поскольку ваши файлы .
rails физически не существуют, и IIS попытается их найти.
Думаю, для начала этого достаточно.
Конечно, эта статья не содержит еще многих полезных функций, таких как:
- Работа с базой данных
- Автоматическая привязка данных от запроса к контроллеру
- Валидации
- Рутов
- Шаблоны, Помощники, Компоненты для презентации
- И многое другое.
Но если тема вам интересна, то я готов продолжать писать статьи об этом замечательном фреймворке, где все вышеперечисленные моменты будут рассмотрены более подробно.
Ссылка на проект Castle - www.castleproject.org Теги: #.
NET #монорельс #castleproject #.
NET
-
Коротко О Встроенном Linux. Второй
19 Oct, 24 -
Аи Ти Эко Деревня (В Порядке Утопии)
19 Oct, 24 -
Работа С Персоналом
19 Oct, 24