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() 之前对其进行强制转换。
我面临着非常奇怪的情况,如果我在 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() 之前对其进行强制转换。