GetAssemblies在IAassembliesResolver中永远不会被调用

本文关键字:调用 永远 IAassembliesResolver GetAssemblies | 更新日期: 2023-09-27 18:06:41

目前我尝试在ASP中覆盖程序集解析。Net WebApi 2。覆盖:

var resolver = new ExtendedAssemblyResolver(new[] { dynAsm });
// Add a list of dynamically loaded assemblies
GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), resolver);

解析器如下所示:

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

问题是,GetAssemblies从来没有被调用过。

我也尝试在我的Startup类中替换解析器,但这也没有帮助:

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

非常感谢!

GetAssemblies在IAassembliesResolver中永远不会被调用

您错过了覆盖

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