0

我有一个包含对象集合(DataProviders)的组件。每个 DataProvider 都有一个由用户在设计时设置的唯一名称。如何让设计器在包含 DataProviders 名称的附加文件中生成一个类?

namespace MyNamespace
{
public class DpContainer : Component
{
public DataProviderCollection collection = new DataProviderCollection();

  private void InitializeComponent()
  {
      DataProvider dataprovider1 = new DataProvider();
      dataprovider1.Name = "Provider 1";

      DataProvider dataprovider2 = new DataProvider();
      dataprovider2.Name = "Provider 2";

      collection.add(dataProvider1);
      collection.add(dataProvider2);
    }
  }
}

生成的类应如下所示:

namespace DataProviderNamespace
{
  public class DataProviderNames
  {
    public const string Provider1 = "Provider 1";
    public const string Provider2 = "Provider 2";
  }
}

我想将此类添加为 Designer.cs 文件。使用 CodeDom 我可以创建此类,但不幸的是我必须指定文件的完整路径。另外,我想让课程部分化。我怎样才能做到这一点?

4

2 回答 2

1

我不确定它是否满足您的需求,但您是否查看过文本模板转换工具包(T4)?我们用它来生成数据访问组件的代码。随 VS 一起提供,因此您无需额外购买。

于 2010-01-29T15:49:38.610 回答
0

好的。我找到了一个解决方案(使用 DTE):在自定义 CodeDomSetializer 的 Serialize 方法中:

IDesignerSerializationManager manager;
EnvDTE._DTE dte = (DTE) manager.GetService(typeof(DTE));

从 dte 我得到实际文档的文件名:

dte.ActiveDocument.FullName

现在我得到当前项目:

ProjectItem proj = (ProjectItem)manager.GetService(typeof(ProjectItem));

并将新文件添加到项目中:

proj.ProjectItems.AddFromFile(NewFile);
于 2010-02-01T11:23:46.753 回答