私は現在、2つのアプリケーション、.NET 2.0 winformsアプリケーション、およびUWPアプリケーションを開発中です。ほとんどのクラスは両方のアプリケーションで共有されています。非同期メソッドと同期メソッドで同じインターフェイスを共有するにはどうすればよいですか?
私はIDialogService
というインターフェースを持っています。これは、.NET2に固有の具体的なクラスと、UWPのための具体的なクラスを持っています。 IDialogService
は、ユーザーがクリックした内容に応じてboolean
を返すShowDialogYesNo()
というメソッドを公開します。
UWPのMessageDialog
には、Show
という同期メソッドではなく、ShowAsync
メソッドがあるという問題があります。だから私はMessageBox
またはMessageDialog
を表示するために同じ署名を使用することはできません。
両方のプロジェクトに共有されるクラスの中には、IDialogService
のインスタンスを使用するものがあります。しかし、ダイアログを表示するUWPのバージョンはasync
である必要があるので、私はShowDialogYesNo()
メソッドをIDialogService
から使用することはできません。
.NET2またはUWPインスタンスをコンストラクタに挿入するために依存関係注入を使用します。ここでの目標はではなく、では.NET2とUWPのコードベースが異なります。
各プラットフォームのインターフェイスの具体的なクラスの実装が異なるのみです。私は#if WINDOWS_UWP
の束を自分のコードに入れたいと思っていません。
public interface IDialogService
{
bool ShowDialogYesNo();
}
public class DialogServiceNet2 : IDialogService
{
public bool ShowDialogYesNo()
{
var result = MessageBox.Show("DialogMessage", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
if (result == DialogResult.Yes)
return true;
return false;
}
}
public class DialogServiceUwp : IDialogService
{
public bool ShowDialogYesNo()
{
//????
}
}
このクラスは、その後.NET2プロジェクトにもともとある私はUWPプロジェクトへのリンクとしてこれを追加しました:
は、ここでは、コードです。基本的に同じファイルです。
public class SomeSharedUtil
{
IDialogService _commonDialog;
public SomeSharedUtil(IDialogService commonDialog)
{
_commonDialog = commonDialog;
}
public bool AskUser()
{
return _commonDialog.ShowDialogYesNo();
}
}
あなたは正しいです、私はただ運をしようとしています。私はおそらく#if WINDOWS_UWPを使用することに固執していますが、実際には同じコードを使用したいと思っています。 – Lance