我在Universal 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
构造函数时抛出异常。除了传递的实例属于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视角的边缘情况。
(在现实生活中,动态对象是从json反序列化的ExpandoObject
。)