2012-02-16 9 views
3

私は自分のソリューションのさまざまな部分に自動的に新しいクラスを生成するコードを入れたいと思います。例:私のソリューションの多くの部分にコードと新しいクラスを自動的に配置できますか?

私はこれらのプロジェクトを持っている:

  • モデル
  • DAO
  • ビジネス
  • ウェブ

私がしたいModelプロジェクトに手動で新しいエンティティを作成します。

  • で作成Model IDAOクラスとIServiceクラスを投影する
  • DAOに作成すると、DAOクラスが作成されます。
  • Businessで作成して、サービスクラスをプロジェクトします。
  • Web\global.asaxにあるApplication_Start()メソッドで作成します。クラスにインターフェイスを登録するコード(Denpendency Injection)。

すべて自動的に行われます。それで、それは可能ですか?

+1

は正直、それが可能だとは思いません。あなたは、自然に、T4のテンプレートを使ってその一部を達成することができますが、あなたが求めているその種のデリバリーは間違いありません。その目的のために独自のプラグインを書くことができるかもしれません。 – Tigran

+0

この目的のためのプラグインには「種類」のプラグインがあります。これは検索を容易にする名前ですか? –

答えて

0

解決済み!私はビジュアルスタジオマクロを使用します。

Obs:戦略を変更しました。 T4ファイル(.tt)を作成する代わりに、String.Replaceによって変更されるいくつかのタグを持つ共通のクラスファイル(.cs)を作成します。

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 
1

Visual Studioマクロを使用すると、この種のものを簡単に自動化できます。

始めるには、2つの場所があります。

  • は、文書を作成VSマクロのためのWebを検索するか、ツールで

  • ルックに興味のある他のアクションを適用する>マクロメニュー。ここから、一時的なマクロを記録することができます(レコーディングを開始してから、ドキュメントを作成してからレコーディングをやめるなど)。その後、マクロIDEでレコーディングマクロを開いて、生成されたコードを確認します(いくつかのアクションでは何も得られませんが、VSはあなたのUIアクションから便利なものを生成するのに大変便利です)。それで、あなたが記録したコードのスニペットをまとめなければならず、マクロを構築してtediusタスクを自動化するのはかなり簡単です。

2

これは常にプロジェクトと達成しようとするものによって異なります。

T4を使用して、の冗長コードを維持しないようにします。このシナリオでは、非常に頻繁に記述されるコードには冗長性があり、冗長性を持たないコードがあります。私はどうなるのか

  • は何とか(T4コード、XMLまたは何でもあなたが好きなの)私のモデルを説明して
  • は、モデルを取るT4テンプレートを作成し、作成し
  • モデルクラスを構築しますモデルを取り、DAOクラスを構築するT4テンプレート
  • モデルを取り、ビジネスクラスを構築するT4テンプレートを作成します。
  • 依存関係のクラスを登録するT4テンプレートを作成しますjection

モードファイルに新しいエンティティを追加すると、VSの「Transform All Templates」がヒットしたりビルドシステムに追加されたりします。 Model、DAO、Business、Application_Startに必要なコードが生成されます。

このソリューションが良いか悪いかは、作業中のプロジェクトと達成したいことによって異なります。

+0

新しいエンティティを 'Model'に追加すると、どのように「Transform All Templates」になるのですか? Obs:すべてのt4テンプレートを作成します。 –

関連する問題