banking-bot/BankingBot/ActionManagers/ActionManager.cs
2017-02-10 20:48:11 +00:00

56 lines
1.8 KiB
C#

using BankingBot.Attributes;
using BankingBot.Contracts;
using BankingBot.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
namespace BankingBot.ActionManagers
{
public abstract class ActionManager
{
protected IBrowserBot BrowserBot { get; private set; }
public ActionManager(IBrowserBot browserBot)
{
BrowserBot = browserBot;
}
protected ActionDetail GetActionDetailFromInterface(object identifyingType, Type interfaceType)
{
var provider = ProviderIdentifier.GetProviderFromType(identifyingType.GetType());
var type = GetTypeAssociatedWithProvider(provider, interfaceType);
return new ActionDetail { Provider = provider, Type = type };
}
protected Type GetTypeFromInterface(Provider provider, Type interfaceType)
{
return GetTypeAssociatedWithProvider(provider, interfaceType);
}
private static IEnumerable<Type> GetTypesImplementingInterface(Type interfaceType)
{
return AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p =>
interfaceType.IsAssignableFrom(p) &&
p != interfaceType).ToList();
}
private static Type GetTypeAssociatedWithProvider(Provider provider, Type interfaceType)
{
var typesImplementingInterface = GetTypesImplementingInterface(interfaceType);
foreach (var type in typesImplementingInterface)
{
var typeProvider = ProviderIdentifier.GetProviderFromType(type);
if (typeProvider == provider)
{
return type;
}
}
return null;
}
}
}