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();
}
}