Как использовать конструктор без параметров с ninject di и winforms - PullRequest
1 голос
/ 02 февраля 2012

Я работаю над приложением WinForm, используя ninject для внедрения зависимостей. Моя первая проблема заключалась в том, что создаваемая форма имела параметр (для DI). Я добавил конструктор без параметров, думая, что это поможет. Проблема в том, что код внутри конструктора с параметром пропускается. Вот как это выглядит:

На моей основной форме:

private void mnuSettings_Click(object sender, System.EventArgs e)
{
   frmSettings objForm = new frmSettings();
   objForm.Owner=this;
   objForm.Show();
}

В форме frmSettings:

private readonly IApplicationPropertiesInterface _applicationProperties;

public frmSettings()
{
   InitializeComponent();
}

public frmSettings(IApplicationPropertiesInterface applicationProperties) : this()
{
   _applicationProperties = applicationProperties;
}

Когда я вызываю _applicationProperties.GetExtractFileSaveLocationDirectory (), он взрывается, потому что код для установки _applicationProperties никогда не вызывался.

Мне интересно, правильно ли я это структурировал и как лучше всего это сделать. Моя цель - вызвать конструктор без параметров, но также установить _applicationProperties.

Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 03 февраля 2012

Полагаю, вы могли ожидать, что наличие в здании Ninject вызовет, что new будет работать не так, как обычно. Это не так - вам нужно сделать kernel.Resolve<Something>, чтобы DI включился. Обратите внимание, что большинство этих ловушек подробно описано в вики

Можете ли вы отредактировать свой ответ, включив в него подробности того, что вы делаете за пределами этой формы, пожалуйста?

Между тем, вот несколько предыдущих вопросов, которые существенно перекрываются: -

...