Язык статически типизирован, если тип переменной известен во время компиляции. Для некоторых языков это означает, что вы, как программист, должны указать тип каждой переменной (например: Java, C, C ++); другие языки предлагают некоторую форму вывода типа , способность системы типов выводить тип переменной (например, OCaml, Haskell, Scala, Kotlin)
Основное преимущество здесь всевозможные проверки могут выполняться компилятором, и поэтому на ранней стадии улавливается множество тривиальных ошибок.
Язык динамически набирается, если тип связан со значениями времени выполнения, а не с именами переменных / полей / и т. д. Это означает, что вы, как программист, можете писать немного быстрее, потому что вам не нужно указывать типы каждый раз (если не использовать статически типизированный язык с выводом типа ). Пример: Perl, Ruby, Python
Большинство языков сценариев имеют эту функцию, так как нет никакого компилятора для статической проверки типов в любом случае, но вы можете найти ошибку, вызванную неправильным интерпретатором интерпретатора тип переменной. К счастью, скрипты имеют тенденцию быть маленькими, поэтому у ошибок не так много мест, чтобы скрыть.
Большинство динамически типизированных языков позволяют вам предоставлять информацию о типе, но не требуют этого. Один язык, который в настоящее время разрабатывается, Rascal , использует гибридный подход, позволяющий динамическую типизацию внутри функций, но обеспечивающий статическую типизацию для сигнатуры функции.
Вы не должны обертывать свой ISession в оператор использования - точка передачи ISessionBuilder в конструктора репозитория (внедрение зависимости) - то, что код вызова ответственен за управление жизненным циклом ISession. Путем обертывания его в использование Расположите (), назван на ISession, и Вы не будете в состоянии к ленивым элементам объекта загрузки или сохраните его.
Мы делаем что-то подобное, просто передав в ISession конструктору репозитория. Код г-на Palermo, насколько я понимаю, просто добавляет ленивую инициализацию ISession. Я не думаю, что это необходимо потому что, почему был бы Вы новый репозиторий, если Вы не собираетесь использовать его?
Я не открыл бы и закрыл бы сеансы по каждому запросу данных к NHibernate. Я пользовался бы библиотеками Unit of Work, что многие другие предлагают или делают еще некоторое чтение. NHForge.org начинает, и я полагаю, что существуют некоторые методы при установке NHibernate для общего веб-приложения.
Один из, "о, ошеломляет, это - прохладные моменты", которые я получил от NHibernate, использовал в своих интересах лениво загружающиеся наборы во время разработки. Это была аккуратная способность опыта не должным быть сделать все те соединения для отображения данных по некоторому связанному объекту.
Путем закрывания сеанса как это, вышеупомянутый сценарий не был бы возможен.
могло бы быть что-то, что продолжает транзакции также.
С ASP.NET MVC Вы хотите удостовериться, что жизнь сессии сохраняется во время Метода действия для Вашего контроллера, как, как только Ваш контроллер вышел, все Ваши данные должны быть собраны. Я не уверен, поможет ли этот механизм с этим.
Вы могли бы хотеть изучить S#arp Architechure, который является рядом библиотек и руководства созданием ASP.NET приложение MVC с помощью nHibernate. http://code.google.com/p/sharp-architecture/
Это та установка, которую я использовал после того, как изучил это подробнее. Кажется, отлично работает, и у него нет той раздражающей привычки создавать ISession для запросов статических файлов, как в большинстве других руководств:
Только что нашел чистое решение, используя Unity для инъекции сессии на запрос:
http://letsfollowtheyellowbrickroad.blogspot.com/2010/05/nhibernate-sessions-in-aspnet-mvc.html