WPF 中的注入和无参数构造函数
Injection and parameterless constructor in WPF
我有 WPF 中的用户控件代码(如下)。我使用 nInject 作为 IocContainer。我在我的应用 class.
的 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 RemindersListing()
{
InitializeComponent();
}
public RemindersListing(IReminderReadLogic reminderReadLogic) : this()
{
...
}
或者考虑像本文中那样使用 DependencyProperty:
http://www.informit.com/articles/article.aspx?p=2115888&seqNum=3
我有 WPF 中的用户控件代码(如下)。我使用 nInject 作为 IocContainer。我在我的应用 class.
的 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 RemindersListing()
{
InitializeComponent();
}
public RemindersListing(IReminderReadLogic reminderReadLogic) : this()
{
...
}
或者考虑像本文中那样使用 DependencyProperty:
http://www.informit.com/articles/article.aspx?p=2115888&seqNum=3