【问题标题】:WPF and Unity - No matching constructor found on typeWPF 和 Unity - 在类型上找不到匹配的构造函数
【发布时间】:2014-06-16 19:58:53
【问题描述】:

我想在使用 VS2012 的 WPF 应用程序中使用 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.cs 中受保护的覆盖无效 OnStartup(StartupEventArgs e)

标签: c# wpf unity-container


【解决方案1】:

在您的App.xaml 中,确保您已经摆脱了正在设置的StartupUri="MainWindow.xaml" 属性。由于您已经覆盖了应用程序的 OnStartup 并提供了 MainWindow 的自定义实例,因此您不应该在 App.xaml 文件中设置默认的 StartupUri 属性,并且 WPF 拼命尝试实例化一个没有默认构造函数。

【讨论】:

  • 我刚刚花了很多时间来解决这个错误 - Expression Studio 4 试图变得聪明,并根据最后创建的控件重新插入 StartupUri。
  • 第二次回到这里。如果可以的话,我会给你另一个赞成票。干杯。
【解决方案2】:

为了补充出色的答案,删除启动 URI 后不要忘记在 App.xaml 声明中调用启动方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2014-09-28
    • 1970-01-01
    • 2019-09-16
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多