Это работает для контроллеров, потому что вы создаете их экземпляры с помощью Ninject (через фабрику контроллеров).
Когда вы выполняете new QueryObject().Execute();
, вы не используете Ninject для создания экземпляра QueryObject.Платформа .NET сама по себе не знает, как вводить свойства.
Вам необходимо использовать ядро Ninject для разрешения вашего QueryObject.Что-то вроде этого должно сделать это:
IKernel kernel = new StandardKernel(new SessionModule());
var queryObject = kernel.Get<QueryObject>();
queryObject.Execute();
Затем ядро создаст новый QueryObject со всеми правильно установленными зависимостями.
Чтобы это работало, вам нужно зарегистрировать QueryObject:
Bind<QueryObject>().ToSelf();
Это говорит Ninject всегда возвращать экземпляр QueryObject, когда вы делаете kernel.Get<QueryObject>();
Это делается в вашем SessionModule
.
Iрекомендуем прочитать Модули и Ядро из документации.≈