PRISM モジュールで MVVM を使用しようとしています。私のモジュールには、Ninject を使用して注入される IOutputService オブジェクトを受け入れるパラメーター化されたコンストラクターを持つ ViewModel があります。
namespace HelloWorld.ViewModels
{
public class HelloWorldViewModel : ViewModelBase
{
private IOutputService outputService;
public HelloWorldViewModel(IOutputService outputService)
{
this.outputService = outputService;
}
}
}
HelloWorldModule.cs ファイルで、IOutputService をそれを実装するクラスに登録します。
public class HelloWorldModule : IModule
{
private IKernel kernel;
private IRegionManager regionManager;
public HelloWorldModule(IKernel kernel, IRegionManager regionManager)
{
this.kernel = kernel;
this.regionManager = regionManager;
}
public void Initialize()
{
kernel.Bind<IOutputService>().To<MessageBoxOutputService>();
regionManager.RegisterViewWithRegion("Region1", typeof(HelloWorldView));
}
}
また、HelloWorldView を Region1 に登録しています。HelloWorldView は HelloWorldViewModel を使用します。現在の問題は、ViewModel にパラメーターなしのコンストラクターがないため、View の XAML で HelloWorldViewModel を初期化できないことです。
<UserControl x:Class="HelloWorld.Views.HelloWorldView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:HelloWorld.ViewModels"
mc:Ignorable="d">
<UserControl.DataContext>
<vm:HelloWorldViewModel />
</UserControl.DataContext>
<Grid>
</Grid>
</UserControl>
これを実行すると、View の InitializeComponent() メソッドが NullReferenceException をスローします。これを機能させる適切な方法はありますか?ありがとう。