Модули NancyFX удаляются сразу после загрузки - PullRequest
0 голосов
/ 27 января 2019

Я написал простое приложение, использующее Nancy 1.4.5, в котором есть один модуль NancyModule.Я использую Nancy Self Hosting с загрузчиком по умолчанию.

Я хочу избавиться от всех модулей Nancy и открыть их заново, если изменится конфигурация приложения (например, текущий порт).Похоже, что все работает до повторного обнаружения, когда Нэнси утилизируется и перестраивается, за исключением того, что Dispose вызывается не в то время.Dispose, кажется, вызывается как часть процесса обнаружения NancyModules.

При запуске моего приложения я вызываю следующий код:

_host = new NancyHost(hostConf, new Uri($"http://localhost:{Port}")); _host.Start();

В моем NancyModule Iреализовали IDisposable.

Как только NancyHost создан (до вызова Start ()), я вижу, что метод Dispose в NancyModule включен.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы переопределяете ConfigureApplicationContainer или ConfigureRequestContainer в вашем BootStrapper?

protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
    base.ConfigureApplicationContainer(container);

    // ...
}

protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)
{
    base.ConfigureRequestContainer(container, context);

    // ...
}

Из документации :

  • ConfigureApplicationContainer - вызывается один раз при запуске Bootstrapper и используется для регистрации зависимостей, которые вы либоВы хотите иметь время жизни области приложения (одиночные приложения) или быть зарегистрированными как несколько экземпляров:
  • ConfigureRequestContainer - Это вызывается один раз за запрос, прежде чем разрешается модуль, соответствующий маршруту, и используется для регистрации одиночных игр, которыебудет иметь срок действия запроса.
0 голосов
/ 28 января 2019

Поработав с регистрацией контейнера TinyIOC, я понял, что происходит.

Класс реализации NancyModule создается / удаляется во время начальной автоматической регистрации.Он также создается / удаляется каждый раз, когда вызывается маршрут.

Это не идеальное поведение для моего приложения, поскольку поддержка службы является постоянным соединением, а переподключение при каждом вызове маршрута добавляет ответ ~ 100 мсвремя на каждый запрос.

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

Было бы лучше, если бы был способ установить модуль NancyModule какодноэлементная регистрация для TinyIOC, но казалось, что даже если я явно установил ее, выполняя пользовательскую регистрацию контейнера, она все еще создавалась при каждом вызове.

...