Использование функции обратного вызова при работе с дуплекс контрактом. WCF
Подскажите как можно правильнее решить следующую простую(учебную) задачу, потому что мне абсолютно не нравится, как я это сделал.
В общем, есть WCF служба, с консольным хостом. Есть winforms клиент. Служба предоставляет возможность записать объекты некоторого класса в файл. После того, как клиент использует эту возможность, должна вызываться функция обратного вызова, которая отрисует в dataGridView данные с файла асинхронно.
Если отбросить момент, что класс, реализующий коллбэк интерфейс "по-хорошему" должен находиться в отдельном файле, то сейчас эта беда выглядит так:
public partial class Form1 : Form
{
private class CallbackHandler : IPatientWriterCallback
{
private readonly DataGridView _dataGridView = null;
public CallbackHandler(DataGridView dataGridView) => _dataGridView = dataGridView;
public void GetAllDoctorPatients(List<Patient> patients)
{
_dataGridView.Visible = true;
_dataGridView.DataSource = patients;
}
}
...
}
Экземпляр создается вот здесь:
private async void button1_Click(object sender, EventArgs e)
{
InstanceContext instanceContext = new InstanceContext(new CallbackHandler(dataGridView1));
_patientWriterClient = new PatientWriterClient(instanceContext);
await _patientWriterClient.AddPatientAsync(new Doctor { Surname = textBox2.Text }, new Patient { Surname = textBox1.Text, Age = (int)numericUpDown1.Value});
comboBox1.DataSource = await DoctorsReaderClient.ReadAllDoctorNamesAsync();
}
Как можно отобразить данные, которые поступает в коллбэк функцию без жесткой привязки объекта dataGridView в классе CallbackHandler?