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