На днях (на самом деле даже не на днях, а на неделях) решил изучить вопрос об альтернативных фреймворках для разработки веб-приложений на платформе .NET. Как ни удивительно, таковые нашлись. И, что еще более удивительно, их оказалось больше одного:

Сегодня (а скорее всего и в ближайшее время) я хотел бы внимаетельнее посмотреть на первый из перечисленных инструментов - NancyFX. Фреймворк привлекает своей простотой и, по словам создателя, это не единственное его преимущество. Среди прочих:

  • Простое тестирование приложений созданных на основе NancyFX
  • Встроенный IoC-контейнер TinyIoC
  • NancyFX - расширяемый, кастомизируемый на каждом уровне
  • Немногословный синтаксис
  • Приложения на основе этого фреймворка можно запускать на Mono
  • Нет необходимости возиться с конфигурационными файлами
  • Работает везде (IIS, WCF, self-hosted, служба Windows…)
  • Хуки в пайплане: можно подключиться в несколько мест до или после выполнения запроса или отдачей ответа
  • Нет завязки на System.Web (а, следовательно, и нет завязки на IIS - можно хоститься хоть на Raspberri PI (может даже будет статья об этом в будущем))
  • Поддержка сообществом

И что дальше?

А дальше - создадим простейшее (каноническое) приложение - Hello, NancyFX! Во- первых. Для работы (ну как работы? так, работки) использовать буду бесплатную Visual Studio 2015 Community Edition. Далее, скачаем и установим шаблоны проектов NancyFX (входят в состав SideWaffle Template Pack ). Естественно, последнее делать не обязательно - можно и ручками все необходимые пакеты через NuGet установить, но мне кажется, что раз уж есть шаблон - почему бы им не воспользоваться? Теперь можно запускать IDE! Запустили и создаём новый проект Nancy (File -> New Project -> Web -> SideWaffel -> Nancy Empty Project with ASP.NET Host). Проект девственно чист. Ну а вы чего ожидали? Написано же - Empty. Оукай. Осталось совсем немного для завершения первого Nancy-приложения. В Solution Explorer (в русской версии “Обозревателе решений” (почему вообще существует русская локализация для VS?!)) жмём на проекте правой кнопкой мыши и создаём новый класс (Add -> New Class (или комбинация Alt+Shiht+C)) прямо в корне проекта. Назовём его HelloNancyFx.cs. Изменим его код на следующий:

public class HelloNancyFx: NancyModule
{
  public HelloNancyFx()
  {
    Get["/"] = _ => "Hello, NancyFX!";
  }
}

И нажмём на F5 (ну у меня именно так запускается активный (Set As Startup Project) проект в Solution Explorer. Да и у всех, наверно?). Должен открыться браузер на странице с адресом примерно такого вида: http://localhst:<случайное-пятизначное-число >. А на странице будет приветственное сообщение от NancyFX: “Hello, NancyFX!”. Как несложно догадаться - вся магия в классе NancyModule, от которого наследуется наш класс HelloNancyFx. Если не вдаваться в подробности - это примерно как ApiController или Controller в ASP.NET Web API или ASP.NET MVC соответственно. В конструкторе нашего класса есть магическая строка Get["/"] = _ => "Hello, NancyFX!"; которая как бы намекает, что при GET-запросе на корень нашего сайта он плюнет в клиента строкой “Hello, NancyFX!”. Дальше можете сами немного поковырять этот довольно интересный и, что не менее важно, простой фрейморк. И под Mono, да. Ну вы поняли, что он мне понравился? Если будут вопросы - задавайте прямо здесь - чем смогу - помогу. До новых встреч!