В предыдущей статье «Создание первого приложения на NancyFX» Мы сделали первые шаги в изучении фреймворка NancyFX. В этой статье мы познакомимся с TinyIoC и Nancy Bootstrapper, встроенным в Nancy по умолчанию.
Nancy поставляется со своим собственным DI прямо из коробки.
Как говорилось ранее, это TinyIoC. Если по каким-то причинам данный DI вас не устраивает, то вы можете установить один из следующих DI:
- Нинжект
- Автофак
- СтруктураКарта
- Виндзор
- Меф
- Нэнси-загрузчик для быстрой почтовой программы
- Загрузчик Nancy Mono для быстрой почтовой программы
Однако вернемся к использованию пакета «из коробки».
В прошлой статье мы создали тестовый проект. Давайте воспользуемся им и добавим к нему интерфейс IUserStorage.cs, который будет реализован нашим фейковым хранилищем.
Далее мы фактически создаем наше поддельное хранилище Storage.cs, которое будет реализовывать созданный нами интерфейс.using System.Collections.Generic; namespace NancyFxApplication { public interface IUserStorage { IList<dynamic> GetAllUsers(); } }
using System.Collections.Generic;
namespace NancyFxApplication
{
public class Storage : IUserStorage
{
public IList<dynamic> GetAllUsers()
{
return new List<dynamic>
{
new {Name = "Homer", Age = 30},
new {Name = "Bart", Age = 12},
new {Name = "Marge", Age = 30},
new {Name = "Lisa", Age = 10}
};
}
}
}
Давайте добавим модуль Нэнси с помощью следующего кода.
using Nancy;
namespace NancyFxApplication
{
public class UsersModule : NancyModule
{
public UsersModule(IUserStorage storage) : base("/users")
{
Get["/GetAll"] = param => (Response.AsJson(storage.GetAllUsers()));
}
}
}
После сборки запускаем наше приложение и получаем следующий результат:
Как мы видим, Nancy.Bootstrapper автоматически нашел и вставил в наш модуль первую найденную в приложении реализацию интерфейса IUserStorage без каких-либо усилий с нашей стороны.
Однако некоторые заметят, что если приложение имеет другую реализацию интерфейса IUserStorage, это поставит нас в неловкую ситуацию, в которой мы не будем знать, какую реализацию интерфейса вызовет Нэнси (фактически Нэнси вызовет первый класс в алфавите из приложения, реализующего запрошенный интерфейс, но нам от этого легче не становится).
Если у нас в приложении есть две или более реализации нашего интерфейса хранилища, то нам на помощь придет TinyIoC.
Давайте добавим следующий класс в наш проект. SouthParkUsers.cs using System.Collections.Generic;
namespace NancyFxApplication
{
public class SouthParkUsers : IUserStorage
{
public IList<dynamic> GetAllUsers()
{
return new List<dynamic>
{
new {Name = "Eric", SecondName = "Cartman", Age = 9},
new {Name = "Kenny", SecondName = "McCormick", Age = 9},
new {Name = "Kyle", SecondName = "Broflovski", Age = 9},
new {Name = "Stan", SecondName = "Marsh", Age = 9},
new {Name = "Butters", SecondName = "Stotch", Age = 9}
};
}
}
}
Теперь давайте добавим класс MyBootstrapper.cs. using Nancy;
namespace NancyFxApplication
{
public class MyBootstrapper : DefaultNancyBootstrapper
{
protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
container.Register<IUserStorage, SouthParkUsers>();
}
}
}
А теперь давайте запустим приложение.
Результат будет следующим:
Как видите, мы заменили класс, реализующий IUserStorage, не прибегая к загрузке сторонних пакетов, а работая в рамках NancyFX. Как видите, использовать NancyFX довольно просто, используя внедрение зависимостей.
Более подробную информацию и более расширенные примеры можно найти по адресу TinyIoC вики , а также на Нэнси Bootstrapper вики .
В заключение хотелось бы анонсировать очередную статью о Нэнси.
В ней мы подробнее рассмотрим модули Нэнси.
Спасибо за внимание.
Буду рад получить отзывы о статье и комментарии.
Теги: #nancyfx #.
NET #mvc 4 #.
NET
-
Распространенные Типы Веб-Хостинга
19 Oct, 24 -
Три Вида Вечной Жизни
19 Oct, 24