В настоящее время я работаю над 2 приложениями, приложением .NET 2.0 winforms и UWP-приложением. Большинство классов разделяются в обоих приложениях.Как я могу использовать один и тот же интерфейс для асинхронных и синхронных методов?
У меня есть интерфейс под названием IDialogService
, который имеет конкретный класс для .NET2 и еще один конкретный класс для UWP. IDialogService
предоставляет метод, называемый ShowDialogYesNo()
, который возвращает boolean
в зависимости от того, что пользователь нажал.
Проблема заключается в том, что MessageDialog
в UWP имеет метод ShowAsync
вместо всего лишь синхронного метода Show
. Поэтому я не смогу использовать одну и ту же подпись для показа 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