我在通用 Windows exe 项目中有以下类(不包括实际功能)。
sealed class DataPage
{
public DataPage(dynamic page)
{
Data = page;
}
public dynamic Data { get; private set; }
}
该程序集包含该InternalsVisibleTo
属性,因此我可以对内部类进行单元测试:
[assembly:InternalsVisibleTo("PictureFrame.UnitTests")]
单元测试项目(通用 Windows 单元测试项目)编译得很好。dynamic
然而,下面的测试在将对象传递给构造函数时会抛出异常DataPage
。除非传递的实例是 type ,否则它不会object
。
[TestMethod]
public void ReproException()
{
var o = new object();
var page = new DataPage(o); // this works fine
var d = (dynamic)o;
var page1 = new DataPage(d); // this throws exception
}
抛出的异常是:'PictureFrame.Model.DataPage.DataPage(object)' is inaccessible due to its protection level.
如果内部类与动态对象交互,我当然可以将它们标记为公共,但这是预期的工作吗?这是我第一次使用这种行为InternalsVisibleTo
,dynamic
对此我感到有些惊讶,但从 DLR 的角度来看,这可能是一个边缘案例。
(在现实生活中,动态对象是ExpandoObject
从 json 反序列化的。)