Мне нужна помощь в разборе конкретных методов из классов, производных от базового класса, и добавлении их в коллекцию делегатов.
У меня есть несколько классов, производных от одного базового класса.Каждый из этих классов имеет 1 или более методов с определенным пользовательским атрибутом [IntentHandler].Все эти методы имеют один параметр.Тип параметра различается в зависимости от метода, но параметр каждого метода является производным от другого базового класса (открытый класс Intent).Мне нужно найти все эти методы, создать соответствующий делегат и добавить их в делегат «Словарь», где ключ - это тип параметра, а значение - метод.
Прямо сейчас я создаю каждый подкласси регистрация его делегата метода, но есть МНОЖЕСТВО подклассов, каждый из которых требует кода для регистрации своих методов.Я бы предпочел справиться с этим через базовый класс, используя System.Reflection.Это значительно уменьшило бы код и позволило бы улучшить расширение в дальнейшем.
public class StaticService : Service
{
delegate void ObjectCreatedIntentHandler(ObjectCreatedIntent oci);
private ObjectCreatedIntentHandler handleObjectCreatedIntent;
public StaticService()
{
handleObjectCreatedIntent = HandleObjectCreatedIntent;
}
private void HandleObjectCreatedIntent(ObjectCreatedIntent oci)
{
}
internal override void RegisterIntentHandlers(IntentManager registry)
{
registry.RegisterForIntent(typeof(ObjectCreatedIntent), handleObjectCreatedIntent);
}
internal override void UnregisterIntentHandlers(IntentManager registry)
{
registry.UnregisterForIntent(typeof(ObjectCreatedIntent), handleObjectCreatedIntent);
}
}
Я бы предпочел что-то более похожее на:
public class StaticService : Service
{
public StaticService()
{
}
[IntentHandler]
private void HandleObjectCreatedIntent(ObjectCreatedIntent oci)
{
}
}
и базовый класс
public class Service
{
public Service()
{
RegisterIntents()
}
private void RegisterIntents()
{
// Find all classes derived from Service
// Find each method in those classes with the [IntentHandler]
// Attribute
// Get the method's Intent Class derived parameter type
// create a delegate I can invoke later for that method.
// Add the delegate to a Dictionary<Intent,Delegate>;
}
}