2015-07-19 3 views
0

У меня есть код для управления пользователями в WPF (см. Ниже). Я использую nInject как IocContainer. Я инициализирую ioc в событии OnStartup в своем классе App.Конструктор инжекции и без параметров в WPF

protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     var iocContainer = IocContainer.Get(); 

     iocContainer.Bind<CreateRemindPopup>().To<CreateRemindPopup>(); 
     iocContainer.Bind<MainWindow>().To<MainWindow>(); 

     Current.MainWindow = iocContainer.Get<MainWindow>(); 
     Current.MainWindow.Show(); 
    } 

Если я удаляю конструктор без параметров, я получаю исключение NullReferenceException, когда должно отображаться управление. Когда присутствует конструктор без параметров, код для отображаемого содержимого не выполняется.

Мой вопрос в том, как заставить WPF выполнять конструктор с параметром? Я не хочу удалять конструктор без параметров, потому что я потерял конструктора в VisualStudio.

public partial class RemindersListing : UserControl 
{ 
    private readonly IReminderReadLogic _reminderReadLogic; 

    public ObservableCollection<Reminder> Reminders { get; set; } 

    public RemindersListing() 
    { 
    } 

    public RemindersListing(IReminderReadLogic reminderReadLogic) 
    { 
     _reminderReadLogic = reminderReadLogic; 
     InitializeComponent(); 

     var list = _reminderReadLogic.Get(); 
     Reminders = new ObservableCollection<Reminder>(list); 
    } 
} 
+0

Чтобы заставить его использовать в своем коде, вы должны передать параметр вместо вызова 'new RemaindersListing();' (который является параметром-less). Вы пытались использовать это? –

+0

Привет, объект создания является внутренним элементом WPF. Я объявил управление кодом xaml, поэтому у меня нет возможности прямого вызова конструктора (по крайней мере, не того, что я знаю) – Jacek

+0

@GrantWinney Я обновил свой пост – Jacek

ответ

3

Как насчет поворота конструктора по умолчанию для частного, так WPF бы назвать его и добавить конструктор с параметрами, которые вы хотите:

private RemindersListing() 
{ 
    InitializeComponent(); 
} 

public RemindersListing(IReminderReadLogic reminderReadLogic) : this() 
{ 
    ... 

} 

Или рассмотреть вопрос об использовании DependencyProperty как в этой статье:

http://www.informit.com/articles/article.aspx?p=2115888&seqNum=3