【问题标题】:GetAssemblies is never called in IAassembliesResolverIAassembliesResolver 中永远不会调用 GetAssemblies
【发布时间】:2016-09-13 07:56:12
【问题描述】:

目前我尝试覆盖在 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 吗? public override ICollection&lt;Assembly&gt; GetAssemblies
  • @heinzbeinz 哦,伙计,如果这是问题所在,我今天就辞职了:D 谢谢,只是监督了漂亮的视觉工作室提示:D

标签: c# .net asp.net-web-api asp.net-web-api2 assemblyresolve


【解决方案1】:

你错过了覆盖

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

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 2014-11-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2012-10-27
    • 2013-10-12
    • 2017-12-31
    相关资源
    最近更新 更多