Ну, мое окончательное решение было обмануть в ninject 2.0 с помощью следующего кода ...
var windowFactory = kernel.Get<IEWindowFactory>();
var tabFactory = kernel.Get<IETabFactory>();
windowFactory.Kernel = kernel;
tabFactory.Kernel = kernel;
и в списке привязок у меня есть
Bind<IEWindowFactory>().ToSelf().InSingletonScope();
Bind<IETabFactory>().ToSelf().InSingletonScope();
и после этого я просто запускаю приложение
var main = kernel.Get<MainForm>();
main.Start();
и, конечно, фабрики вводятся там, где они мне нужны, в наследии этой MainForm.
поэтому я вручную помещаю ядро при запуске, а затем при начальной загрузке своего приложения, естественно, эти фабрики являются полями в классах с аннотацией [Ninject], и поэтому они могут создавать объекты. не самый чистый, пока мы не получим 3.0, но он работает (и я ненавижу дополнительные фабричные классы, для которых я должен писать код, ну да ладно).