Как обеспечить цель привязки для methodinfo при использовании пользовательских атрибутов? - PullRequest
0 голосов
/ 13 апреля 2020

Я использую атрибуты, чтобы получить все мои методы и обернуть их в некоторых делегатов. Это выглядит так:

        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? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...