在设计时生成自定义类

时间:2010-01-29 15:37:16

标签: c# codedom

我有一个包含对象集合的组件(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我能够创建这个类,但不幸的是我必须指定文件的完整路径。另外我想让课程偏袒。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

我不确定它是否能满足您的需求,但您是否看过Text Template Transformation Toolkit(T4)?我们用它来生成数据访问组件的代码。附带VS,所以这不是你必须购买的东西。

答案 1 :(得分: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);