Я не думаю, что IConfig хорошо подходит для создания с использованием контейнера, так как вы не знаете значений параметров, пока не пришло время его создать. Я думаю, что вы должны предоставить экземпляр конфигурации коду, который вызывает контейнер, чтобы получить форму.
Вы можете передать аргументы в контейнер, используя метод With:
ObjectFactory.With<IConfig>(theConfig).GetInstance<Form2>();
Вы хотите минимизировать обращения к контейнеру, желательно только к одному месту в вашем приложении, которое связывает остальную часть во время начальной загрузки. Альтернатива - зарегистрировать Func, разрешить его во время начальной загрузки и использовать его для создания экземпляра Form2.
Регистрация:
var formFactory = config => new Form2(config);
x.For<Func<IConfig, Form2>>().Use( () => formFactory);
Использование:
//Get the Func somehow, preferably as a ctor dependency in Form1
var form2Creator = ...
var config = new Config({some parameters from Form1 here});
var form2 = form2Creator(config);