RobinJiangdh
5/17/2017 - 1:30 PM

Autofac.RegisterModuleExtension

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