この記事は
C# Japan - Discordにて、Visual Studio 2022でもPrismのテンプレートが使えると知った!
この記事は、実際にプロジェクトをつくってみたまでの話
Visual Studio 2022 拡張機能
メニュー > 拡張機能 > 拡張機能の管理
Visual Studio Marketplaceで検索
WPF用のTemplate Studioをダウンロード、インストールする
Visual Studioを再起動すると、Template Studio for WPF
が選べるようになっている
(拡張機能をいろいろ漁っていたら、気分転換によさそうなテーマカラーを見つけたので、衣替えした)
プロジェクトをつくる
アラカルト的に基本レイアウトやテストフレームワークを選べる
- プロジェクトの種類
- ナビゲーションパネル
- メニューバー
- リボン
-
デザインパターン
- MVVM Toolkit
- Prism
- コードビハインド(従来型のモデル)
- ページ
- ウェブビュー
- リスト
- グリッド
- テスト
ナビゲーションとリストの組み合わせでつくった
こんなに選択肢があると思わなかった・・・
プロジェクトの構造
できあがったプロジェクト
ターゲットは.NET6
になっている
TODO
が6個書いてあるので、その箇所を変更するっぽい
Prism Full Appプロジェクトテンプレート1ではModules
とServices
フォルダーにプロジェクトが配置さていたので、そこが違う
そもそもモジュールは使われていないようで、ConfigureModuleCatalog
などは別途追加する必要がありそう
F5
で実行してみた結果
App.xaml.cs
protected
メソッドはおなじみ
インスタンス変数が_
始まりであるのが、親近感がもてる
ASP.NETよろしくappsettings.json
で構成をスイッチする
public partial class App : PrismApplication
{
private string[] _startUpArgs;
public App() { }
protected override Window CreateShell() => Container.Resolve<ShellWindow>();
protected override async void OnInitialized()
{
base.OnInitialized();
await Task.CompletedTask;
}
protected override void OnStartup(StartupEventArgs e)
{
_startUpArgs = e.Args;
base.OnStartup(e);
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// Core Services
// App Services
containerRegistry.Register<ISampleDataService, SampleDataService>();
// Views
containerRegistry.RegisterForNavigation<ListDetailsPage, ListDetailsViewModel>(PageKeys.ListDetails);
containerRegistry.RegisterForNavigation<MainPage, MainViewModel>(PageKeys.Main);
containerRegistry.RegisterForNavigation<ShellWindow, ShellViewModel>();
// Configuration
var configuration = BuildConfiguration();
var appConfig = configuration
.GetSection(nameof(AppConfig))
.Get<AppConfig>();
// Register configurations to IoC
containerRegistry.RegisterInstance<IConfiguration>(configuration);
containerRegistry.RegisterInstance<AppConfig>(appConfig);
}
private IConfiguration BuildConfiguration()
{
var appLocation = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
return new ConfigurationBuilder()
.SetBasePath(appLocation)
.AddJsonFile("appsettings.json")
.AddCommandLine(_startUpArgs)
.Build();
}
private void OnExit(object sender, ExitEventArgs e) { }
private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// TODO: Please log and handle the exception as appropriate to your scenario
// For more info see https://docs.microsoft.com/dotnet/api/system.windows.application.dispatcherunhandledexception?view=netcore-3.0
}
}
おわり
これは深堀りしがいがある。。。