Создаем первое приложение на NancyFX

Почему NancyFX?



Сейчас, когда набирают популярность single page application, от серверного фреймворка требуется фактически перенаправить запрос пользователя по определенному роуту на какую-то конкретную страничку. К серверной части не предъявляются какие либо особые требования, от нее нужно только перенаправление. При использовании .NET просто глупо становится для таких целей использовать такую махину как ASP.NET MVC, 99% возможностей которой будут не востребованы. Плюс к этому достаточно громоздкая структура проекта MVC, включающего в себя как минимум три папки и большое количество ссылок на библиотеки, при всем при том что от конечного результата Вам требуется только редирект на готовую html страничку.

Как один из вариантов для выхода из сложившейся ситуации это использование фреймворка NancyFX, который является идеальным решением для таких ситуаций( если конечно у Вас на сервере используется .NET). Основные достоинства этого фреймворка состоят в легковесности, простоте( как будет показано ниже), а также в том что он может быть размещен не только на Windows хостинге но и на *unix платформах с MONO.

Как и ASP.NET MVC создателей NancyFX вдохновил проект на языке Ruby. И если «поводом» для вдохновения создания ASP.NET MVC было Ruby on Rails, то в случае NancyFX такой музой стал фреймворк Sinatra. Немного истории: В прошлом веке в США жил да был такой певец как Фрэнк Синатра, а у него была дочка Нэнси, вот собственно в честь этой Нэнси создатели фреймворка и назвали свое детище.

Первое приложение на NancyFX


И так приступим…

Для начала создадим пустое ASP.NET приложение.

image

После создания приложения обратимся к помощи уже полюбившегося всем nuget.

image

В поиске набираем nancy и устанавливаем два пакета Nancy(собственно для работы) и Nancy.Hosting.Aspnet(для хостинга соответственно).

image

После инсталяции мы сможем наблюдать в списке установленных пакетов следующую картину

image

Далее в проект добавляем класс. Называем его NancyFxModule.

image

В наследуем класс от NancyModule И определяем конструктор класса. В базовый конструктор можно передать путь для роута к API именно этого модуля, но так как приложение у нас простое в этом примере мы делать этого не будем. Далее в конструкторе мы определяем делегат(используя лямбда выражение) при помощи которого мы будем хэндлить запросы к нашему приложению по корневому роуту ("/").
В конечном виде наш класс будет иметь следующий вид:
image

Теперь добавляем в проект собственно html файл



Запускаем проект нажатием на F5:



Как вы можете заметить процесс создания приложения занял каких то пять минут. Все лаконично и предельно прозрачно. Но давайте добавим еще один роут и модернизируем класс следующим образом:



В NancyFx использует по умолчанию Super Simple View Engine. В отличие от Razor она не поддерживает ViewBag и мы имитируем VieBag добавлением DinamicDictionary, с последующим добавлением оного во ViewModel. При желании можно подключить пакет Razor и пользоваться всеми преимуществами именно это привычного графического движка/ Следующим нашим действием будет добавление файла Hello.html в наш проект. Файл должен иметь следующий вид



После этого запускаем приложение и получаем следующий результат



Как говорилось выше, это тестовое приложение демонстрирует вам всю простоту и лаконичность NancyFX. В завершении хотелось бы отметить хорошую документацию фреймворка, которая доступна на сайте проекта.

Использованные материалы и полезные ссылки:
nancyfx.org — собственно сайт проекта
ben.onfabrik.com/posts/nancy-vs-aspnet-mvc-getting-started — сравнение создания MVC ASP.NET приложения и NancyFX
github.com/NancyFx/Nancy — проект на гит хабе.
visualstudiogallery.msdn.microsoft.com/f1e29f61-4dff-4b1e-a14b-6bd0d307611a — темплейты проектов на Nancy в Visual Studio Gallery.
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 16
  • +6
    За кадром остались: встроенные из коробки поддержку DI, вполне приличный биндер моделек, расширяемость и заменяемость всего и вся. Говорить же о том, что у NancyFx меньше возможностей — как минимум странно, оно не уступает во функционалу ASP.NET MVC, зато ощутимо проще тестируется и может быть запущено не только поверх ASP.NET, но и вообще чего угодно — на входе движок принимает некий абстрактный запрос, на выходе не менее абстрактный ответ.
    • 0
      Абстрактный запрос, как вы выразились, крутиться вокруг старого доброго HttpListener. В рамках данной статьи рассказывалось как написать Hello world на Nancy. Как раз в данный момент готовлю пример с использованием IoC из коробки, а также более детально рассказывающий как использовать SuperSimpleVieEngine. Ориентировачно закончу вторую статью во вторник среду, потом буду готов послушать ваши отзывы
      • 0
        Если кому будет интересен лёгкий фреймворк для SPA, хостинга API и т.д. — рекомендую обратить внимание на OWIN & Katana: www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana
        • +2
          NancyFx умеет поверх OWIN работать, кстати.
        • 0
          Прикольно, аналог Sinatra поверх .NET. Для нелюбителей Ruby :)
          • 0
            Почитал немного доку на их сайте… хм, а мне понравилось. Надо будет в следующем проекте попробовать.
            Одно смущает, как бы в результате использования разных «очень нужных мне фичулек», не получился бы проект (мой) размером с MVC.
            • 0
              попробуйте. я уже пару лет знаком с NancyFX, и пока он только радует. изначально MVC 1.0 был очень лёгок и быстр, но со временем оброс скомпилированными фичами, которые многим и не нужны вовсе, и стал монстроват. У ненси разработчики очень аккуратны с этим.

              Также, с помощью Owin, NancyFX-проекты можно запускать на разных платформах. А дополнительный IoC у тежеляет, но если действительно «включить всё» :)
            • 0
              а что насчет Service Stack?
              • +1
                Service Stack прекрасен :)
                • +1
                  ServiceStack в конце 2013-ого года всё ещё не научился обрабатывать Task в качестве ответа, что мешает написанию кода с применением async/await. У NancyFx таких проблем нет.
                  • +1
                    Service Stack с версии 4.0 будет предоставлять только коммерческую версию (С исключением для проектов с открытым исходным кодом).
                  • 0
                    Вы прямо читаете мысли, статьи по сервисстеку будут после ненси. Как по мне последний гораздо конкурентнее ненси
                    • 0
                      по мне тоже. Я вот никак не соберусь написать статью о нем, и нигде не нашел на хабре даже упоминания
                    • 0
                      А у них появилась поддержка асинхронности? помню в дев версии была, но что-то очень долго тянули.

                      Кстати, есть еще фреймворк Anna, это для любителей Rx (Reactive Extensions)
                      • +1
                        Сто лет уже как, Get["/route", true] = async ()=>{await Task.Delay(100); return «Hello»;};
                        • 0
                          Ну отлично тогда! Пойду попробую.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.