0

Currently I try to override the assembly resolving in ASP.Net WebApi 2. Overrideing:

var resolver = new ExtendedAssemblyResolver(new[] { dynAsm });

// Add a list of dynamically loaded assemblies
GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), resolver);

The resolver looks like this:

public class ExtendedAssemblyResolver : DefaultAssembliesResolver
{
    private string[] dynamicAssemblies;

    public ExtendedAssemblyResolver(string[] dynamicAssemblies)
    {
        System.Diagnostics.Debugger.Launch();
        this.dynamicAssemblies = dynamicAssemblies;
    }

    public ICollection<Assembly> GetAssemblies()
    {
        var baseAssemblies = base.GetAssemblies();
        var assemblies = new List<Assembly>(baseAssemblies);

        if (dynamicAssemblies != null)
        {
            foreach (var asm in dynamicAssemblies)
            {
                var controllersAssembly = Assembly.LoadFrom(asm);
                baseAssemblies.Add(controllersAssembly);
            }
        }

        return baseAssemblies;
    }
}

The problem is, that GetAssemblies is never called.

I've also tried to replace the resolver in my Startup class, but this does not help either:

public void Configuration(IAppBuilder appBuilder)
{
    // Configure Web API for self-host. 
    HttpConfiguration config = new HttpConfiguration();
    // -- here
}

Thanks a lot!

BendEg
  • 20,098
  • 17
  • 57
  • 131
  • 1
    Don't you need an override for `GetAssemblies`? `public override ICollection GetAssemblies` – Nico Sep 13 '16 at 07:59
  • @heinzbeinz oh man, if that's the problem, I quit for today :D Thanks, just overseen the nice visual studio hint :D – BendEg Sep 13 '16 at 08:00

1 Answers1

1

You are missing the override

public class ExtendedAssemblyResolver : DefaultAssembliesResolver
{
    private string[] dynamicAssemblies;

    public ExtendedAssemblyResolver(string[] dynamicAssemblies)
    {
        System.Diagnostics.Debugger.Launch();
        this.dynamicAssemblies = dynamicAssemblies;
    }

    public override ICollection<Assembly> GetAssemblies()
    {
        var baseAssemblies = base.GetAssemblies();
        var assemblies = new List<Assembly>(baseAssemblies);

        if (dynamicAssemblies != null)
        {
            foreach (var asm in dynamicAssemblies)
            {
                var controllersAssembly = Assembly.LoadFrom(asm);
                baseAssemblies.Add(controllersAssembly);
            }
        }

        return baseAssemblies;
    }
}
Nico
  • 3,542
  • 24
  • 29