C# WPF和Unity-在类型上找不到匹配的构造函数
我想在使用VS2012的WPF应用程序中使用Unity,我定义了Unity容器,如下所示:C# WPF和Unity-在类型上找不到匹配的构造函数,c#,wpf,unity-container,C#,Wpf,Unity Container,我想在使用VS2012的WPF应用程序中使用Unity,我定义了Unity容器,如下所示: IUnityContainer unityContainer = new UnityContainer(); unityContainer.RegisterType<IMainViewModel, MainViewModel>(); var window = unityContainer.Resolve<MainWindow>(); window.Show(); public M
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.main窗口”。您可以使用参数或FactoryMethod
用于构造此类型的指令。'行号'3'和行位置
“9”
我做错了什么?在您的
App.xaml
中,确保您已删除正在设置的StartupUri=“MainWindow.xaml”
属性。由于您已经覆盖了应用程序的启动时的,并提供了主窗口的自定义实例
,因此您不应该将默认属性保留在App.xaml文件中,而WPF拼命尝试在没有默认构造函数的情况下实例化一个类型。为了补充这个出色的答案,删除启动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>
公共部分类应用程序:应用程序
{
公共IContainer容器{get;private set;}
私有void应用程序\u启动(对象发送方、StartupEventArgs e)
{
var dependencyconfigulator=new DependencyConfig();
container=dependencyConfigurator.Configure();
container.Resolve();
MainWindow.Show();
}
}
在容器中注册依赖项并实例化主窗口的代码放在哪个文件/位置?启动时受保护的覆盖无效(StartupEventArgs e)在App.xaml.csI中,我花了很多时间来解决这个bug-Expression Studio 4试图变得聪明,并根据上次创建的控件重新插入StartupUri。第二次回到这里。如果可以的话,我会再投你一票。干杯
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();
}
}