Ninject в основном имеет 5 опций для области действия.
TransientScope - тот, который вы используете, означает, что для каждого запроса создается новый экземпляр
SingletonScope - создается только один экземпляр
ThreadScope - для каждого потока создается только один экземпляр
RequestScope - для HttpRequest создается только один экземпляр
Пользовательский - вы предоставляете объект области действия
Если вы создаете веб-приложение, вы можете просто указать .InRequestScope()
Если это приложение для Windows, вы можете указать .InThreadScope()
Наконец, если вам нужно указать гибрид (я не совсем уверен, как он работает на карте структуры), вы могли бы сделать .InScope(ctx => HttpRequest.Current != null ? HttpRequest.Current : Thread.CurrentThread)