2

我在通用 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.

如果内部类与动态对象交互,我当然可以将它们标记为公共,但这是预期的工作吗?这是我第一次使用这种行为InternalsVisibleTodynamic对此我感到有些惊讶,但从 DLR 的角度来看,这可能是一个边缘案例。

(在现实生活中,动态对象是ExpandoObject从 json 反序列化的。)

4

0 回答 0