Вы можете использовать DocumentClient.UpsertDocumentAsync вместо CreateDocumentAsync, чтобы создать новый документ или обновить существующий, например:
await _client.UpsertDocumentAsync(collectionLink, document);
Вы могли использовать отражение, но это будет немного хитрым из-за различных включенных подписей обработчика событий. В основном необходимо было бы добраться EventInfo
для каждого события в типе и использования EventHandlerType
свойство для разработки, что тип делегата создать перед вызовом AddEventHandler
. Delegate.CreateDelegate
работы для всего, что следует за нормальным шаблоном обработчика событий хотя...
Вот демонстрационное приложение. Обратите внимание, что это не делает никакой проверки - если Вы дадите ему что-то с "нестандартным" событием, то это выдаст исключение. Вы могли довольно легко использовать отражение для распечатывания события args также.
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Reflection;
namespace ConsoleApp
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Form form = new Form { Size = new Size(400, 200) };
Button button = new Button { Text = "Click me" };
form.Controls.Add(button);
EventSubscriber.SubscribeAll(button);
Application.Run(form);
}
}
class EventSubscriber
{
private static readonly MethodInfo HandleMethod =
typeof(EventSubscriber)
.GetMethod("HandleEvent",
BindingFlags.Instance |
BindingFlags.NonPublic);
private readonly EventInfo evt;
private EventSubscriber(EventInfo evt)
{
this.evt = evt;
}
private void HandleEvent(object sender, EventArgs args)
{
Console.WriteLine("Event {0} fired", evt.Name);
}
private void Subscribe(object target)
{
Delegate handler = Delegate.CreateDelegate(
evt.EventHandlerType, this, HandleMethod);
evt.AddEventHandler(target, handler);
}
public static void SubscribeAll(object target)
{
foreach (EventInfo evt in target.GetType().GetEvents())
{
EventSubscriber subscriber = new EventSubscriber(evt);
subscriber.Subscribe(target);
}
}
}
}
Я думаю, что Вы могли использовать Отражение, чтобы сделать это.
Это не может быть сделано. При использовании Отражателя для просмотра большого количества классов Платформы, Вы найдете общий шаблон при увольнении событий:
// fire event
if (EventDelegate != null)
EventDelegate(eventArgs);
Таким образом, событие даже не запущено, если никто не подписывается на него