Использование функции обратного вызова при работе с дуплекс контрактом. 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?


Ответы (0 шт):