2016-04-25 12 views
1

コントローラで1つのメソッドを作成しましたが、このメソッドを別のクラスに呼び出す必要があり、呼び出す方法がわかりません。コントローラのアクションメソッドをc#mvcの別のクラスに呼び出す必要があります

私のサンプルコード: -

public class ReportController : BaseController 
    { 
     private readonly IPermissionService _permissionService; 
     private readonly ICompaniesService _companyService; 

     public ReportController(IPermissionService permissionService, 
      ICompaniesService companyService) 
     { 
      this._permissionService = permissionService; 
      this._companyService = companyService; 
     } 

     public void Reporting() 
     { 
      // code 
     } 
     } 


    public class Home { 

     public void Execute() 
     { 
      //I need to execute the Reporting method here 
     } 

    } 

私は別のクラスのメソッドで私のメソッドを呼び出すために多くのことを試してみましたが、私はそれを動作させることはできません。

+4

'新しいReportController()()の報告;' –

+0

可能性の重複[メソッドC#で別のメソッドを呼び出す方法?](http://stackoverflow.com/questions/16226444/how-to-make-method-call-another-one-in-classes-c) – Draken

+0

それですか? staticメソッドとしてReportingメソッドを作成することは可能ですか? – Mukund

答えて

0
ReportController reportController = new ReportController(); 
reportController.Reporting(); 

あなたが方法だ他のクラスは静的

ではないでしょうとしてthis答えを読んでください、彼らは私がこれを達成する2つの方法があります

+0

をパラメータ化構造体に入れることはできません。またコントローラのオブジェクトを作成できません。また、BaseControllerのメソッドをReport Controllerに実装していますので、直接オブジェクトを作成することはできません。 – vijay

+0

DIライブラリを使用するか、 'その火格子 –

1

を行うよりも、より多くの細部に入ります。あなたは、コントローラのコンストラクタで依存性注入を使用しているので、あなたはこれを行うことの二つの選択肢持って(私はいずれかを見逃しているかどうかわからないの?):

  • は、呼び出し方法であなたのサービスのそれぞれのインスタンスを作成し、これらを渡しますご自宅のクラスにコンストラクタを追加し、コントローラ、または
  • をインスタンス化する際に、コントローラをインスタンス化する際の事例を通しては、サービスを設定して、それらを渡す

オプション1:

public class Home 
{ 
    public void Execute() 
    { 
      // Create the variables that are needed by the constructor 
      IPermissionService permissionService = new PermissionService(); 
      ICompaniesService companiesService = new CompaniesService(); 

      // Create an instance of your controller and pass through 
      // the variables created above 
      ReportController reportController = new ReportController(permissionService, companiesService); 

      // Now that you have an instance of your controller call the method 
      reportController.Reporting(); 
    } 
} 

クラスのインスタンスを作成し、そのメソッドを呼び出すのと同じ原則で動作します。

オプション2:

public class Home 
{ 
    private IPermissionService permissionService; 
    private ICompaniesService companiesService; 

    public Home(IPermissionService permissionService, ICompaniesService companiesService) 
    { 
      this.permissionService = permissionService; 
      this.companiesService = companiesService; 
    } 

    public void Execute() 
    { 
      ReportController reportController = new ReportController(permissionService, companiesService); 

      reportController.Reporting(); 
    } 
} 
+0

しかし、複数の場所で使うことができるコントローラにメソッドを入れるのは良い考えではありません。 – Mukund

+0

これは私のコードではありません:) OPにこれを教えてください.. –

3

これは、いくつかの場所で呼ばれるように持っているコントローラにいくつかのコードを持っていることは悪い設計方法です。プロジェクト内またはこのコードを含む外部DLL内にクラスを作成し、このメソッドを必要とするコントローラでこのクラスを呼び出します。

(あなたに突出、またはクラスライブラリ内の)どこかでクラスを作成します。

public class MyClass 
{ 
    public MyClass() 
    {} 

    public void MyMethod() 
    { 
     // Some code here 
    } 
} 

そして、これを必要とするあなたのコントローラやクラスでこのコードを実装します。ところで

public class ReportController : BaseController 
    { 
     private readonly IPermissionService _permissionService; 
     private readonly ICompaniesService _companyService; 

     public ReportController(IPermissionService permissionService, 
      ICompaniesService companyService) 
     { 
      this._permissionService = permissionService; 
      this._companyService = companyService; 
     } 

     public void Reporting() 
     { 
      MyClass myClass = new MyClass(); 
      myClass.MyMethod(); 
     } 
} 

あなたのコードは、任意のインスタンスを必要としない場合、あなたは次のように、静的クラスを作成することができます。

public static class MyClass 
{ 
    public static void MyMethod() 
    { 
     // Some code here 
    } 
} 

public class ReportController : BaseController 
{ 
     private readonly IPermissionService _permissionService; 
     private readonly ICompaniesService _companyService; 

     public ReportController(IPermissionService permissionService, 
      ICompaniesService companyService) 
     { 
      this._permissionService = permissionService; 
      this._companyService = companyService; 
     } 

     public void Reporting() 
     { 
      MyClass.MyMethod(); 
     } 
} 
関連する問題