BetterCms.Module.Api.WebApiApplicationHost.GetAssembliesWithServices C# (CSharp) Method

GetAssembliesWithServices() private static method

private static GetAssembliesWithServices ( ) : System.Reflection.Assembly[]
return System.Reflection.Assembly[]
        private static Assembly[] GetAssembliesWithServices()
        {
            var assemblies = new List<Assembly>();
            ICmsModulesRegistration modulesRegistry;
            IAssemblyLoader assemblyLoader = null;

            using (var container = ContextScopeProvider.CreateChildContainer())
            {
                modulesRegistry = container.Resolve<ICmsModulesRegistration>();
                if (modulesRegistry == null)
                {
                    throw new CmsApiException("Failed to resolve ICmsModulesRegistration.");
                }

                assemblyLoader = container.Resolve<IAssemblyLoader>();
                if (assemblyLoader == null)
                {
                    throw new CmsApiException("Failed to resolve IAssemblyLoader.");
                }

                foreach (var module in modulesRegistry.GetModules())
                {
                    try
                    {
                        var assembly = assemblyLoader.Load(module.ModuleDescriptor.AssemblyName);
                        if (assembly != null)
                        {
                            var types = assemblyLoader.GetLoadableTypes(assembly);
                            foreach (var type in types)
                            {
                                if (typeof(ServiceStack.ServiceInterface.Service).IsAssignableFrom(type) && type != null && type.IsPublic && type.IsClass
                                    && !type.IsAbstract)
                                {
                                    assemblies.Add(assembly);
                                    break;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.ErrorFormat("Failed to check for ServiceStack services in the assembly {0}.", ex, module.ModuleDescriptor.AssemblyName);
                    }
                }
            }

            return assemblies.ToArray();
        }
    }