private static Dictionary<Type, ISubscriptionFilter> GetSubscriptionFilters(IEnumerable<Assembly> assemblies)
{
var typeToFilter = new Dictionary<Type, ISubscriptionFilter>();
foreach (var assembly in assemblies)
{
foreach (
var type in
assembly.GetTypes().Where(
type =>
typeof(ISubscriptionFilter).IsAssignableFrom(type) && !type.IsAbstract && type.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(ISubscriptionFilter<>))))
{
var filterAttribute =
type.GetCustomAttributes(typeof(SubscriptionFilterAttributeActive), true).SingleOrDefault() as
SubscriptionFilterAttributeActive;
if (filterAttribute == null || filterAttribute.Active)
{
var types = type.GetInterfaces().Where(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(ISubscriptionFilter<>)).Select(x => x.GetGenericArguments()[0]);
foreach (var t in types)
{
typeToFilter[t] = Activator.CreateInstance(type, true) as ISubscriptionFilter;
}
}
}
}
return typeToFilter;
}