私のWPFプロジェクトは次のように構成されます。
Screens
Group1
Screen1
View.xaml
ViewModel.cs
Group2
Screen2
View.xaml
ViewModel.cs
Screen1
からを表示するには、次のScreen2
ようなものを使用します。これは、ViewとViewModelの名前空間でScreenManager.Show("Group1.Screen1")
(リフレクションを使用して)表示され、それらをインスタンス化します。Screens.Group1.Screen1
Screen1
結合せずにマジックストリングを削除するにはどうすればよいですか(クラスで名前空間を使用しScreen2
たくない)。また、ある種の画面検出(オートコンプリート/インテリセンス)が欲しいです Screen2
Screen1
ScreenManager.Show
または、へのすべての呼び出しが有効であることを確認するための何らかの方法(自動テスト) 。
更新: 私はこれを思いついた:
public class ScreenNames
{
public Group1Screens Group1;
public class Group1Screens
{
public ScreenName Screen1;
}
}
public sealed class ScreenName
{
private ScreenName() { }
}
public class ScreenManager : IScreenManager
{
public void Show(Expression<Func<ScreenNames, ScreenName>> x) {}
}
使用法:
screenManager.Show(x=>x.Group1.Screen1);
理想的ではありませんが、DRYに違反することはマジックストリングよりも優れていると思います。そして、すべての呼び出しが有効であることを(リフレクションを使用して)自動的にテストできます。