WPF和Unity -在类型上找不到匹配的构造函数
本文关键字:找不到 构造函数 类型 Unity WPF | 更新日期: 2023-09-27 18:09:03
我想在使用VS2012的WPF应用程序中使用Unity,我定义了Unity容器如下:
IUnityContainer unityContainer = new UnityContainer();
unityContainer.RegisterType<IMainViewModel, MainViewModel>();
var window = unityContainer.Resolve<MainWindow>();
window.Show();
我的窗口构造函数如下:
public MainWindow(IMainViewModel mainViewModel)
{
InitializeComponent();
this.DataContext = mainViewModel;
}
当我运行应用程序,我得到以下错误:
类型的未处理异常"System.Windows.Markup。XamlParseException'发生在PresentationFramework.dll附加信息:'没有找到匹配的构造函数的类型"WPFClient.MainWindow"。您可以使用Arguments或FactoryMethod构造此类型的指令。行号"3"和行位置"9"。
我做错了什么?
在您的App.xaml
中,确保您已经删除了正在设置的StartupUri="MainWindow.xaml"
属性。由于您已经覆盖了应用程序的OnStartup
并提供了MainWindow
的自定义实例,因此您不应该在App.xaml文件中设置默认的StartupUri
属性,并且WPF不顾一切地尝试实例化没有默认构造函数的类型。
为了补充这个优秀的答案,在删除启动URI之后,不要忘记在App.xaml声明中调用startup方法:
<Application x:Class="Test.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test.App"
Startup="Application_Startup">
<Application.Resources>
</Application.Resources>
</Application>
public partial class App : Application
{
public IContainer container { get; private set; }
private void Application_Startup(object sender, StartupEventArgs e)
{
var dependencyConfigurator = new DependencyConfig();
container = dependencyConfigurator.Configure();
container.Resolve<WindowClassName>();
MainWindow.Show();
}
}