【发布时间】:2015-07-19 15:58: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);
}
}
【问题讨论】:
-
要强制它在你的代码中使用,你应该传递一个参数而不是调用
new RemaindersListing();(这是无参数的)。你试过用这个吗? -
您好,创建对象是WPF内部的事情。我在 xaml 代码中声明了控制,所以我没有机会直接调用构造函数(至少我不知道)
-
@GrantWinney 我更新了我的帖子
标签: c# .net wpf dependency-injection ninject