Bus.Dispatch.AssemblyScanner.GetSubscriptionFilters C# (CSharp) Method

GetSubscriptionFilters() private static method

private static GetSubscriptionFilters ( IEnumerable assemblies ) : ISubscriptionFilter>.Dictionary
assemblies IEnumerable
return ISubscriptionFilter>.Dictionary
        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;
        }