好的,鉴于进一步的澄清,这是我会做的。
为了遵循GraemeF提出的问题,你想要做的事情在最好的情况下是脆弱且容易出错的。
因此,通常的做法是将设计时数据支持视为与运行时数据支持完全不同的方法。简单来说,您正在创建的设计时环境与此数据库之间的耦合是一个坏主意。
为了简单地提供可视化的设计时数据,我更喜欢使用符合公共接口的模拟类作为运行时类。这使我有一种展示数据的方式,我可以确保数据是正确的类型,并符合与我的运行时对象相同的契约。然而,这是一个完全不同的类,用于设计时支持(通常也用于单元测试)。
例如,如果我有一个运行时类需要显示人员详细信息,如名字、姓氏和电子邮件:
public class Person()
{
public String FirstName { get; set;}
public String LastName {get; set;}
public Email EmailAddress {get; set;}
}
我正在运行时从数据库中填充此对象,但也需要提供设计时可视化。为此,我将引入一个IPerson接口,定义要遵守的契约,即强制存在属性getter:
public interface IPerson()
{
String FirstName { get; }
String LastName { get; }
Email EmailAddress { get; }
}
然后我会更新我的运行时Person类来实现这个接口:
public class Person() : IPerson
{
public String FirstName { get; set;}
public String LastName {get; set;}
public Email EmailAddress {get; set;}
}
然后我会创建一个模拟类,实现相同的接口并提供合理的值以供设计时使用
public MockPerson() : IPerson
{
public String FirstName { get { return "John"; } }
public String LastName { get { return "Smith"; } }
public Email EmailAddress { get { return new Email("John@smith.com"); } }
}
然后,我会实现一种机制,在设计时提供MockPerson对象,而在运行时提供真正的Person对象。类似于this或this。这可以在运行时和设计时环境之间提供硬依赖关系的设计时数据支持。
这种模式更加灵活,并且可以让你在整个应用程序中提供一致的设计时数据支持。