2010-01-29 44 views
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我可以創建這個類,但不幸的是我必須指定文件的完整路徑。此外,我想讓課程部分。我怎樣才能做到這一點?

回答

1

我不確定它是否滿足您的需求,但您是否看過文本模板轉換工具包(T4)?我們用它來爲數據訪問組件生成代碼。 VS附帶,所以它不是你必須購買的東西。

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);