小编Sve*_*ann的帖子

将目标转换为IEnumerable时,Moqing GetEnumerable失败

我正在尝试模拟Visual Studio CommandBars实例.CommandBars实现非通用的IEnumerable接口.为了能够迭代模拟,我设置了GetEnumerable().奇怪的是,这只有在我将mock.Object作为CommandBars的一个实例访问时才有效.如果我转换为IEnumerable(因为它在使用Linq方法时隐式发生),GetEnumerable()突然返回null.有人可以解释这种行为吗?

var mockCommandBars = new Mock<CommandBars>();
IEnumerable bars = new List<CommandBar>();
mockCommandBars.Setup(cb => cb.GetEnumerator()).Returns(bars.GetEnumerator);

var cbs = mockCommandBars.Object;
var cbs1 = cbs.GetEnumerator();  // returns instance
var ecbs = (IEnumerable) cbs;
var cbs2 = ecbs.GetEnumerator(); // returns null!
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用Moq 4.2.1402.2112

c# ienumerable moq

4
推荐指数
1
解决办法
517
查看次数

Ninject Conventions是否仅适用于公共课程?

我开始在我的项目中使用Ninject来自动绑定抽象类的所有子类.对此的绑定是 - 简单易行 - 如下:

kernel.Bind(x => x.FromThisAssembly()
    .SelectAllClasses().
    .InheritedFrom<AbstractGenerator>()
    .BindBase());
Run Code Online (Sandbox Code Playgroud)

但是,我发现这不起作用.经过一些实验,我发现这不起作用的原因是我的所有实现(和抽象类)都标记为内部.

我可以想象这是一些安全功能,以防止绑定从内部泄漏到外部.但我可以为这些类添加显式绑定.因此,我的问题是:有人知道这是否是预期的行为?有没有办法解决这个问题,除了让我的所有课程都公开?

c# ninject ninject-extensions

1
推荐指数
1
解决办法
837
查看次数

标签 统计

c# ×2

ienumerable ×1

moq ×1

ninject ×1

ninject-extensions ×1