private void ConfigAutofac() { var builder = new ContainerBuilder(); var typeFinder = new TypeFinder(); var assemblies = typeFinder.GetAssemblies().ToArray(); // OPTIONAL: Register model binders that require DI. builder.RegisterModelBinders(assemblies); builder.RegisterModelBinderProvider(); builder.RegisterAssemblyTypes(assemblies); // OPTIONAL: Register web abstractions like HttpContextBase. builder.RegisterModule <AutofacWebTypesModule>(); // OPTIONAL: Enable property injection in view pages. builder.RegisterSource(new ViewRegistrationSource()); // OPTIONAL: Enable property injection into action filters. builder.RegisterFilterProvider(); // Register your MVC controllers. builder.RegisterControllers(assemblies).EnableClassInterceptors(); //Register All Other Services //dependencies builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance(); //register dependencies provided by other assemblies var drTypes = typeFinder.FindClassesOfType <IDependencyRegistrar>(); var drInstances = new List <IDependencyRegistrar>(); foreach (var drType in drTypes) { //Ignore not installed plugins var plugin = PluginManager.FindPluginByType(drType); if (plugin != null && !plugin.Installed) { continue; } drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType)); } //sort drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList(); foreach (var dependencyRegistrar in drInstances) { dependencyRegistrar.Register(builder, typeFinder); } var container = builder.Build(); // Set the dependency resolver to be Autofac. DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { //check for assembly already loaded var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.FullName == args.Name); if (assembly != null) { return(assembly); } //get assembly from TypeFinder assembly = TypeFinder?.GetAssemblies().FirstOrDefault(a => a.FullName == args.Name); return(assembly); }