我想把我自动生成的代码和新类放在我的解决方案的不同部分。例如:
我有这些项目:
当我在Model
项目中手动创建一个新实体时,我想:
Model
项目中创建您的IDAO课程和IService课程DAO
项目中创建您的DAO课程。Business
项目中创建您的服务类。Application_Start()
文件中创建Web\global.asax
文件中用于注册类接口的代码(Denpendency Injection)。 所有事情都是自动的。那么,有可能吗?
答案 0 :(得分:2)
它总是取决于项目以及您尝试实现的目标。
我使用T4来避免维护冗余代码。在您经常描述的场景中,有些代码感觉多余并且难以实现非冗余。
我会做什么:
当我向模式文件添加新实体时,我会在VS中点击“转换所有模板”或将其添加到构建系统。这将为Model,DAO,Business和Application_Start生成必要的代码。
如果此解决方案的好坏取决于您正在进行的项目以及您希望实现的目标。
答案 1 :(得分:1)
您可以使用Visual Studio宏轻松自动化这类内容。
这是开始的两个地方:
在网络上搜索创建文档的VS宏,或应用您感兴趣的其他操作
查看工具>宏菜单。从这里你可以录制一个临时宏(开始录制,然后执行一个aciton,如创建文档,然后停止录制)。然后在Macros IDE中打开录制宏以查看它生成的代码(对于某些操作,您将无法获得任何内容,但大多数情况下,VS非常擅长通过UI操作生成一些有用的代码)。然后你必须将你记录的代码片段拼接在一起,并且通常很容易构建一个宏来自动执行tedius任务。
答案 2 :(得分:0)
解决!我使用visual studio宏。
Obs:我改变了策略。而不是创建一个T4文件(.tt),我创建一个公共类文件(.cs)与一些将由String.Replace更改的标记。
using System;
// place here your necessary "usings"
namespace #namespace#
{
/// <summary>
/// Class responsible for #entity# data access.
/// </summary>
public class #class# : I#class#
{
}
}
宏:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.IO
Public Module Templates
' Get the active class (in this case will be the entity that you have just created)
Dim entity As String = DTE.ActiveDocument.Name.Replace(".cs", "")
Dim projects As Projects = DTE.Solution.Projects
' Project where are the template classes
Dim projectTemplates As Project = DTE.ActiveDocument.ProjectItem.ContainingProject
Sub CreateCRUD()
' Exemple of creating DAO Class
CreateClass("NamespaceWhereAreYouProject.Repositorio\ NamespaceWhereAreYouProject.Repositorio.csproj", _
"DAL", _
" NamespaceWhereAreYouProject.Repository.DAL", _
"DAO" + entity, _
"DAOTemplate.cs")
End Sub
Private Sub CreateClass(ByVal currentProject As String, _
ByVal currentFolder As String, _
ByVal currentNamespace As String, _
ByVal currentClass As String, _
ByVal currentTemplate As String)
' Loading attributes
Dim project As Project = projects.Item(currentProject)
Dim folder As ProjectItem = project.ProjectItems.Item(currentFolder)
Dim currentTemplatePath As String = projectTemplates.ProjectItems.Item("Templates") _
.ProjectItems.Item(currentTemplate).Properties.Item("FullPath").Value
Dim newClassPath As String = folder.Properties.Item("FullPath").Value + currentClass + ".cs"
' Creating class
folder.ProjectItems.AddFromTemplate(currentTemplatePath, currentClass + ".cs")
Dim newText As String = File.ReadAllText(newClassPath) _
.Replace("#class#", currentClass) _
.Replace("#namespace#", currentNamespace) _
.Replace("#entity#", entity)
File.WriteAllText(newClassPath, newText)
End Sub
End Module