пятница, 18 марта 2016 г.

Фильтр request модели. Web API


На днях возникла задача на проверку входных данных от пользователей: запретить отступы у  строковых данных в начале и в конце. Модель большая, делать у каждого свойства типа string что-то в стиле 

Name=model.Name.IfNotNull(x=>x.Trim())  

не хотелось. По этому пришлось поискать в интернете. Наткнулась на фильтр, который переписывает  request модель в web-api-добавляет определенный данные, причем сам тип модели не известен. Немного переделав код, получился вот такой фильтр: 

 public class TrimFieldFilterAttribute : ActionFilterAttribute
 {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            foreach (var keyValuePair in actionContext.ActionArguments)
            {
                var model = actionContext.ActionArguments[keyValuePair.Key];
                if (model == null)
                    continue;

пятница, 26 февраля 2016 г.

NINJECT+WEB API 2+Fluent Validation

Надеюсь эта статья сэкономит кучу времени темкто сталкивался в названиями в заголовке статьи, а тем более в одном проектеКак же совместить эти решения вместе? 
1. Создавался проект AST.NET WEB API 2Так как проект требовал Dependency Injection, то  использовался в нем контейнер DI Ninject. 
Поэтомупервоначально в проект был добавлен пакет 
Ninject.Web.WebApi а после Ninject.Web.WebApi.WebHost Все через NuGetПосле установки, в проекте должен появиться класс NinjectWebCommonкоторый и будет вызывать автоматически метод Start. В методе  
private static void RegisterServices(IKernel kernel) 
{
   kernel.Bind<>().To<>(); 
} 
вы объявляете нужные привязки. 

воскресенье, 3 января 2016 г.

Dependency Inversion

Dependency Inversion-один из принципов SOLID:
  • Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракции.
  • Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Для тех, кто только начинает знакомиться  с  Dependency Inversion, такое определение не понятно. Зато эта тема весьма популярна на собеседование. Попробую объяснить простым языком и легким примером "из жизни".

В проекте есть два класса, которые создают сообщение и отправляют его определенным адресатам.

    public class MessageToMainOffice
    {
        public void Send()
        {
            //создаем сообщение для главного офиса и отправляем на заданные адреса
        }
    }