2016-04-12 8 views
0

私は現在、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(); 
    } 
    } 

答えて

4

できません。非同期操作では、同期メソッドとは異なるパブリックAPIが必要です。 呼び出し元は、同期と非同期の操作を別々に呼び出す必要があります(火災や忘却の方法を除く)。は同期が1つで非同期のみが同じ場合は同じ契約(a.k.a.インターフェイス)を実行できません。

+0

あなたは正しいです、私はただ運をしようとしています。私はおそらく#if WINDOWS_UWPを使用することに固執していますが、実際には同じコードを使用したいと思っています。 – Lance

関連する問題