Рассмотрим следующий интерфейс:
public interface IMyCallback
{
void SomeEvent(int someArg);
}
, который является контрактом для обратного вызова WCF, который будет получать "события" от службы WCF. Моя реализация для этого интерфейса выглядит следующим образом
public class MyCallback : IMyCallback
{
void IMyCallback.SomeEvent(int someArg)
{
OnSomeEvent(someArg);
}
protected virtual void OnSomeEvent(int someArg)
{
EventHandler<SomeEventArgs> handler = this.SomeEvent;
if (handler != null)
{
handler(this, new SomeEventArgs(someArg));
}
}
public event EventHandler<SomeEventArgs> SomeEvent;
}
, что позволяет мне создать экземпляр обратного вызова и перехватить событие SomeEvent в моем клиентском коде. Всякий раз, когда сервер вызывает мой обратный вызов, я получаю это простое старое событие .NET. Все отлично работает.
Здесь возникает вопрос: я хотел бы написать фабричный класс для автоматизации создания этого обратного вызова, чтобы я легко использовал этот подход во всех своих проектах и с любым интерфейсом. Завод будет называться так:
var myCallback = CallbackFactory.CreateCallback<IMyCallback>();
Могу ли / должен ли я использовать фальшивую среду для динамического создания этого класса, или я должен укусить пулю и выпустить IL напрямую? Или я должен просто передать код каждой реализации? Или есть другой подход, о котором я не думаю?