Autofac.RegisterModuleExtension
/// <summary>
/// Registers modules dynamically scanning .dll files.
/// </summary>
/// <param name="filterStr">assemble filters "Module.*.dll"</param>
public static void RegisterModules(this ContainerBuilder builder,string filterStr)
{
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (String.IsNullOrWhiteSpace(path))
{
return;
}
// Gets all compiled assemblies.
// This is particularly useful when extending applications functionality from 3rd parties,
// if there are interfaces within the modules.
var assemblies = Directory.GetFiles(path, filterStr, SearchOption.TopDirectoryOnly)
.Select(Assembly.LoadFrom);
foreach (var assembly in assemblies)
{
// Gets the all modules from each assembly to be registered.
// Make sure that each module **MUST** have a parameterless constructor.
var modules = assembly.GetTypes()
.Where(p => typeof (IModule).IsAssignableFrom(p)
&& !p.IsAbstract)
.Select(p => (IModule) Activator.CreateInstance(p));
// Regsiters each module.
foreach (var module in modules)
{
builder.RegisterModule(module);
}
}
}