WPF中的注入和无参数构造函数

本文关键字:参数 构造函数 注入 WPF | 更新日期: 2023-09-27 18:03:30

我在WPF中有用于用户控制的代码(如下)。我使用nInject作为IocContainer。我在我的App类的OnStartup事件中初始化ioc。

    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);
    }
}

WPF中的注入和无参数构造函数

如何将默认构造函数改为private,以便wpf调用它并添加带有您希望的参数的构造函数:

private RemindersListing()
{
    InitializeComponent();
}
public RemindersListing(IReminderReadLogic reminderReadLogic) : this()
{
    ...
}

或者考虑像本文那样使用DependencyProperty:

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