Я использую атрибуты, чтобы получить все мои методы и обернуть их в некоторых делегатов. Это выглядит так:
var assembly = Assembly.GetExecutingAssembly();
var methods = assembly.GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => m.GetCustomAttributes(typeof(T), false).Length > 0)
.ToArray();
foreach (var m in methods)
{
var attr = (T)m.GetCustomAttribute(typeof(T));
string name = attr.eventName;
if (name == null) name = m.Name;
if (m.ReturnType == typeof(void))
{
var d = (ServerCallbackAction)Delegate.CreateDelegate(typeof(ServerCallbackAction), null, m);
if (typeof(T) == typeof(CEFRequestAttribute))
Bridge.Instance.OnCEFRequest(name, d);
else Bridge.Instance.OnClientRequest(name, d);
}
Проблема в том, что эти делегаты не могут получить доступ к экземпляру DeclaringType, так как я должен связать их? И я не могу использовать Activator.CreateInstance
, потому что мои экземпляры создаются с помощью других атрибутов, и мне не нужно создавать их снова.
Есть ли другие способы создания делегата / действия из methodinfo? Заранее спасибо.