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"。

我做错了什么?

WPF和Unity -在类型上找不到匹配的构造函数

在您的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();
        }        
    }