Ответы пользователя по тегу ASP.NET
  • ASP.NET MVC 5 - Почему автоматически выходит из аккаунта?

    FirstX
    @FirstX
    .net developer
    Давно уже с asp.net не работал, но возможно стоит посмотреть тогда в сторону сохранения сессий в БД, либо на уровне самого сервера, если перезапускается конкретно только твой процесс сайта.

    https://msdn.microsoft.com/en-us/library/ms178586(v=vs.140).aspx
    Ответ написан
  • Зачем нужны Dependency containers?

    FirstX
    @FirstX
    .net developer
    Для того, чтобы отделить мух от котлет.

    Представь, что у тебя условно есть 3 отдела. И все они между собой очень тесно связаны. Ну не могут работать друг без друга и все тут. В итоге захотел поменять что-то во втором отделе, будь добр поменяй и в остальных двух, ибо они от него напрямую зависят.

    Первое, что приходит в голову - создание абстрактных интерфейсов, через которые все взаимодействие и происходит. Ок, создали. Но абстрактные интерфейсы делать ничего не могут, на то они абстрактные. Значит где-то нужно явно создавать реализацию для этой абстракции. Становится вопрос где это делать. Создавать внутри одного класса - экземпляры другого, это уже тоже сильная связанность между ними. Для этого и придумали ящик, где будут храниться все соответствия между интерфейсами и реализациями. Захотел получить реализацию такого-то интерфейса, попросил ответственного менеджера, он сам заглянул в свой ящик и вытащил то, что тебе требуется. И назвали это все Контейнер Зависимостей (Dependency Container). То есть это конкретный инструмент для создания слабых связей между модулями.

    Ну а слабая связанность модулей и абстракции между ними дают всякие полезные фишки по типу быстрого переключения между реализациями (например реальное/тестовое окружение), позволяет проще рефакторить отдельные модули и так далее.
    Ответ написан
  • Какая разница между OWINContext.Get() и его обобщенным методом?

    FirstX
    @FirstX
    .net developer
    1. habrahabr.ru/post/227351 - пункт 3, создается кастомный менеджер и явно тип не указывается. Предполагаю, что и в твоем примере - если убрать скобки с типом менеджера, ничего криминального не случится.

    2. Видимо потому, что во втором случае стоит более строгое ограничение по сигнатуре метода, чем у просто Get. А там возможно требуется использование и вызовы методов, которые определены в родительском для всех менеджеров классе UserManager. И соответственно в сигнатуре метода GetUserManager<T> стоит ограничение where <T> : UserManager.

    Скажу честно, в исходниках я не смотрел как на самом деле, но уверен на 90%, что +/- это так
    Ответ написан
  • Почему метод GetEnumerator() интерфейса IEnumerable реализовывается дважды?

    FirstX
    @FirstX
    .net developer
    Для ответа на этот вопрос надо окунуться в историю. А именно был момент, когда не было Generic-типизации и был только нетипизированный интерфейс перечисления IEnumerable. А потом с приходом новой версии .Net появились обобщения (это когда явно указывается тип <T>, в твоем случае тип данных <Product>).

    Сигнатура этого интерфейса выглядит следующим образом:
    public interface IEnumerable<out T> : IEnumerable

    То есть для обратной совместимости, новый интерфейс наследует старый, а значит и метода нужно реализовать два: один, который возвращает старый нетипизированный вариант, и новый, более удобный типизированный вариант.

    Для понимания: в старом варианте, когда ты обходил в цикле каждый элемент через foreach - тип элемента был object (все другие типы от него унаследованы). И на каждой итерации, чтобы получить свой тип Product и работать с ним - приходилось делать приведение типов.
    В новом варианте, благодаря тому, что явно указан тип <Product> при обходе в цикле - ты сразу получаешь объект типа Product.

    Рекомендую по этой теме почитать вообще изменения в .Net при переходах с версии на версию + почитать про Generic в дотнете.
    Ответ написан
  • Как в ASP.NET MVC избежать дублирования кода в JS и HTML (Razor)?

    FirstX
    @FirstX
    .net developer
    Единственный путь избавления от такого "дублирования", это
    1. либо полностью перемещать формирование html разметки нужного участка в javascript/jquery код (jqGrid пример)

    2. либо полностью перемещать в серверный метод, который формирует частичное представление с нужной моделью данных

    Иначе вы в ситуации, когда на странице вы можете навернуть абсолютно любую html разметку, но программный код вы не хотите учить и рассказать ему, что у вас там вообще есть и как с этим работать. Так можно делать, только в четкой и однозначной структуре, где есть определенные закономерности, которые можно распарсить и проанализировать.
    Ответ написан
  • Обработка ошибок в Asp.net MVC?

    FirstX
    @FirstX
    .net developer
    Когда тыкаю Continue появляется моя страница ошибки и все нормально.


    все нормально перехватывается, возникает моя страница ошибки.


    Почему ошибка нормально не перехватывается?


    В обоих случаях у вас все нормально, но в вопросе уже что-то не нормально. Возможно не совсем корректно сформулировано условие проблемы.

    Возможно Вы имеете в виду, что при явном вбросе исключения - студия вываливает вас в код, а потом только показывает страницу с ошибкой, а при неправильно указанном пути - сразу показывается страница с ошибкой. Точки останова в методе-обработчике нет?

    Если все так, то все просто: в первом случае вы явно вбрасываете исключение в собственной реализации контроллера, то есть у вас есть доступ к коду, где оно вывалилось. Во-втором случае этим занимаются грубо говоря скомпилированные DLLки движка, к коду которых в студии доступа вы не имеете и поэтому исключение там внутри сразу уходит в глобальный обработчик.
    Ответ написан