wpf designer:用于抛出异常的类型初始化程序

时间:2010-02-16 18:48:56

标签: wpf exception designer

我遇到了在WPF中数据绑定到服务类的问题。我的服务类有一个静态构造函数,可以读取配置信息并提取一些必需的信息。问题是在设计过程中,我得到错误,Mytype的类型初始化程序引发了异常。我相信这是因为Visual Studio的配置中不存在配置信息。当我运行应用程序时,一切正常,但由于此错误,我无法设计任何内容。

我认为如果无法获取我的数据绑定对象,设计将恢复为某些默认显示。显然它没有并杀死整个设计师。是否有关于此问题的解决方法,例如关闭数据绑定控件的动态显示。这是令人沮丧和令人失望的。我正在使用Visual Studio 2008 SP1。

这是我网格中数据绑定代码的片段。

<ObjectDataProvider ObjectType="{x:Type local:DataService}" x:Key="dataProvider" 
    MethodName="GetCollection" >
    <ObjectDataProvider.MethodParameters>
         <s:Int32>1</s:Int32>
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

基本上,除非具有配置信息,否则DataService类无法实例化自身。我试图为我的特定情况创建一个解决方法,其中静态构造函数实例化数据存储库的具体实现。但是,我无法直接这样做,因为这会在我的项目中创建一个循环引用。我尝试继承该类并捕获父类的静态构造函数中的所有异常。那仍然行不通。关于变通方法的任何其他想法或错误日志,它显示有关抛出异常的更多详细信息。

我试图剥离所有东西以找到最低的共同点。我删除了静态构造函数,基本上返回了基本要素。我发现从数据库中检索数据的任何内容都无法呈现。如果我返回静态列表,一切都很好。我正在使用微软企业库数据访问块。同样,应用程序运行时工作正常。我假设它找不到所需的数据库连接信息,但为什么会出现问题?微软必须假设在他们构建VS2008时会发生这种情况。我做错了吗?

1 个答案:

答案 0 :(得分:2)

你是对的。 Visual Studio设计器无法访问您的数据库连接字符串。提供设计时数据的常用方法是首先检查应用程序是否处于设计模式,如果是,则返回一些虚拟数据,而不与数据库建立任何连接。

如下所示

public class DataService
{

   public IList<string> GetCollection()
   {

      if (!DesignerProperties.GetIsInDesignMode(new DependencyObject()))
      {

         // get data from database here
      }
      else
      {
         // return fake data for the designer
         return new List<string> {"my", "test", "data"};
      }
   }
}

重要的是,如果它将在设计模式下使用,永远不要求任何需要配置的东西。

相关问题