Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Autofac Fails to Resolve after App Pool Recycle

I've used Autofac for years and never seen this behavior: after building, the app runs fine. However, after the app pool is recycled (I tested this by touching the web.config), I get a DependencyResolutionException:

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Namespace.Controllers.HomeController' can be invoked with the available services and parameters

HomeController has one dependency, which has other dependencies, etc. But I know it can resolve them, because it does before it's recycled. Why on earth would this happen???

I autowire everything like so:

public static IContainer GetAutoFacContainer()
{
    var builder = new ContainerBuilder();
    var assembliesToRegister = AppDomain.CurrentDomain.GetAssemblies()
        .Where(a => a.FullName.StartsWith("Prefix")).ToArray();
    builder.RegisterAssemblyTypes(assembliesToRegister)
       .AsImplementedInterfaces().AsSelf().PropertiesAutowired().InstancePerLifetimeScope();
    return builder.Build();
}

Then I use the container for WebAPI and MVC Controllers.

var autoFacContainer = DependencyRegistrar.GetAutoFacContainer();
DependencyResolver.SetResolver(new AutofacDependencyResolver(autoFacContainer));
GlobalConfiguration.Configuration.DependencyResolver = 
    new AutofacWebApiDependencyResolver(autoFacContainer);
like image 694
ItsJason Avatar asked Dec 02 '25 06:12

ItsJason


1 Answers

Thanks to Steven's comment above, I did find the answer on the other question as well as the Autofac site. Why these never turned up in my research I don't know.

http://docs.autofac.org/en/latest/faq/iis-restart.html

The Solution

Change AppDomain.CurrentDomain.GetAssemblies()

To BuildManager.GetReferencedAssemblies().Cast<Assembly>()

Done!

like image 61
ItsJason Avatar answered Dec 04 '25 16:12

ItsJason



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!