dotnet-core 找不到基本接口方法

dotnet-core could not found base Interface method

我面临着非常奇怪的情况,如果我在 VS 2015 中尝试它导航基本符号方法而没有任何 problem.Even VS Code with Omnisharp on Ubuntu 16.04 导航到方法没有问题。但是当 i 运行 时,它只是抛出一些奇怪的异常。我 %100 确定有方法...

这是 /Yakari.Tests/{outputdir}/Yakari.dll

的 dotPeek 屏幕截图

结构如下:

public interface ICacheProvider : IDisposable
{
    .....
    void Set(string key, object value, TimeSpan expiresIn, bool isManagerCall = false);
    .....
}


public interface ILocalCacheProvider : ICacheProvider
{
    ....
}


public abstract class BaseCacheProvider : ICacheProvider
{
    .....
    public abstract void Set(string key, object value, TimeSpan expiresIn, bool isManagerCall = false);
    .....
}


public class LittleThunder : BaseCacheProvider, ILocalCacheProvider
{
    .....
    public override void Set(string key, object value, TimeSpan expiresIn, bool isManagerCall = false)
    {
        ....
    }
    .....   
}

当我们做这样的事情时:

public class SomeTestClass {

    ILocalCacheProvider _localCacheProvider;

    public SomeTestClass(ILocalCacheProvider localCacheProvider) {
        _localCacheProvider = localCacheProvider;
    }

    public void SomeTestMethod() {
        // Below line throws: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : 'Yakari.ILocalCacheProvider' does not contain a definition for 'Set'
        _localCacheProvider.Set("key", dynamic value, CacheTime.FifteenMinutes);
    }
}

代码取自 https://github.com/TitaniumSoft/yakari

注意: 您可以在应用程序 CI Log

看到相同的 运行time 错误

有什么想法吗? 感谢和问候...

您在 GreatEagle.cs:line 201 中遇到的错误是因为您正在使用类型为 "dynamic" 的内容进行接口调用作为参数传递。如果涉及到 "dynamic" 变量,接口调度会变得非常复杂,基于反射,而且速度很慢。

那么对于 InMemoryCacheItem.ValueObject:为什么 属性 键入为 "dynamic"?通过在您的存储库中进行简短搜索,您不妨将其键入 "object" 并避免所有 RuntimeBinder 的痛苦,因为您无论如何都要将它投射到任何地方。或者至少在将对象传递给 Set() 之前对其进行强制转换。