2016-04-25 52 views
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

是嗎?您可以創建報告方法爲靜態? – Mukund

回答

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

,就像任何其他類的方法不是靜態的

請仔細閱讀this答案,他們進入一個有更詳細的比我還多

+0

在參數化contructure我不能crate crate控制器的對象,我也有實現BaseController的方法到報告控制器,所以我不能直接創建對象 – vijay

+0

你應該使用DI庫或爲每個參數創建一個新的實例,你可以使用'StructureMap '它的爐排 –

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(); 
     } 
} 
相關問題